[petsc-dev] Investigation about 'unused direct shared library dependencies'
Satish Balay
balay at mcs.anl.gov
Thu Oct 6 09:36:24 CDT 2016
>>>>>>>
+ ./configure --build=x86_64-redhat-linux-gnu --host=x86_64-redhat-linux-gnu --program-prefix= --disable-dependency-tracking --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --datadir=/usr/share --includedir=/usr/include --libdir=/usr/lib64 --libexecdir=/usr/libexec --localstatedir=/var --sharedstatedir=/var/lib --mandir=/usr/share/man --infodir=/usr/share/info CFLAGS=-O2 -g -pipe -Wall -Werror=format-security =2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic CXXFLAGS=-O2 -g -pipe -Wall -Werror=format-security =2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic FCFLAGS=-O2 -g -pipe -Wall -Werror=format-security =2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic FFLAGS=-O2 -g -pipe -Wall -Werror=format-security =2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic LDFLAGS=-Wl,-z,relro -specs=/usr/lib/rpm/redhat/redhat-hardened-ld --with-default-arch=0 --with-make=1 --with-single-library=1 --enable-debug=0 --enable-shared=1 --with-precision=double --with-index-size=32 --with-petsc-arch=x86_64 --with-clanguage=C --with-shared-libraries=1 --with-64-bit-indices=0 --with-fortran-interfaces=1 --with-windows-graphics=0 --CC=gcc --FC=gfortran --with-gnu-compilers=1 --with-vendor-compilers=0 --with-shared-ld=ld --with-pic=1 --sharedLibraryFlags= --dynamicLibraryFlags= --with-debugging=0 'COPTFLAGS=-O2 -g -pipe -Wall -Werror=format-security =2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic -O3 -Wl,-z,relro -specs=/usr/lib/rpm/redhat/redhat-hardened-ld' 'CXXOPTFLAGS=-O2 -g -pipe -Wall -Werror=format-security =2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic -O3' 'FOPTFLAGS=-O2 -g -pipe -Wall -Werror=format-security =2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic -O3 -I/usr/lib64/gfortran/modules' --with-blas-lib=/usr/lib64/libopenblas.so --with-lapack-lib=/usr/lib64/libopenblas.so --with-blas-lapack-suffix= --known-64-bit-blas-indices=0 --with-hwloc=1 --with-hwloc-pkg-config=/usr/lib64/pkgconfig --with-hwloc-include=/usr/include/hwloc --with-hwloc-lib=/usr/lib64/libhwloc.so --with-metis=1 --with-metis-include=/usr/include --with-metis-lib=/usr/lib64/libmetis.so --with-openmp=1 --with-mpi=0 --with-mpiuni-fortran-binding=1 --with-fc=gfortran --with-libjpeg=1 --with-libpng=1 --with-papi=1 --with-papi-include=/usr/include --with-papi-lib=/usr/lib64/libpapi.so --with-hwloc=1 --with-hwloc-include=/usr/include --with-hwloc-lib=/usr/lib64/libhwloc.so --with-suitesparse=1 --with-suitesparse-include=/usr/include/suitesparse '--with-suitesparse-lib=[/usr/lib64/libumfpack.so,/usr/lib64/libklu.so,/usr/lib64/libcholmod.so,/usr/lib64/libamd.so]' --with-cgns=1 --with-pthread=1 --with-valgrind=1 --with-valgrind-dir=/usr
<<<<<<<<<
Thats a lot of options to configure. Ok - lets look at the summary
>>>>>>>>
Compilers:
C Compiler: gcc -O2 -fPIC -fopenmp
C++ Compiler: g++ -O2 -fopenmp -fPIC
Fortran Compiler: gfortran -O2 -fPIC -fopenmp
Linkers:
Shared linker: gcc -Wl,-z,relro -shared -O2 -fPIC -fopenmp
Dynamic linker: gcc -Wl,-z,relro -shared -O2 -fPIC -fopenmp
make:
BLAS/LAPACK: -L/usr/lib64 -L/usr/lib64 -lopenblas -L/usr/lib64 -L/usr/lib64 -lopenblas
Arch:
hwloc:
Includes: -I/usr/include
Library: -lhwloc
metis:
Includes: -I/usr/include
Library: -L/usr/lib64 -lmetis
openmp:
papi:
Includes: -I/usr/include
Library: -L/usr/lib64 -lpapi
pthread:
Library: -lpthread
cgns:
Library: -lcgns -lhdf5
libjpeg:
Library: -ljpeg
libpng:
Library: -lpng
valgrind:
Includes: -I/usr/include
SuiteSparse:
Includes: -I/usr/include/suitesparse
Library: -L/usr/lib64 -lumfpack -lklu -lcholmod -lamd
PETSc:
PETSC_ARCH: x86_64
PETSC_DIR: /builddir/build/BUILD/petsc-3.7.3/petsc-3.7.3
Scalar type: real
Precision: double
Clanguage: C
shared libraries: enabled
Integer size: 32
Memory alignment: 16
<<<<<<<
> /lib64/libmetis.so.0
As Matt mentioned - metis is a dependency for parmetis [so its of no use in a sequential build].
You could use --with-metis=0
> /lib64/libhwloc.so.5
And PETSc does not make library calls to hwloc. [Its a useful tool to
have - so packaging part of configure provides support for it - but
sneaks in as a library? Its also a dependency for Trilinos]
You could use --with-hwloc=0 [similarly --with-ssl=0]
PAPI? Hm - that doesn't get tested much.. similarly libjpeg libpng
However you might want to use --with-x=1
> /lib64/libhdf5.so.10
hdf5 is sneaking in as a dependency for cgns. Not sure what you can do about it.
> /lib64/libquadmath.so.0
> /lib64/libstdc++.so.6
> /lib64/libgomp.so.1
PETSc configure attempts to detect compiler libraries - and provide a link command that
would work with all languages [c,c++,fortran]
-lstdc++ is coming from g++, -lquadmath from gfortran and -lgomp must be coming from all 3 with '-fopenmp'
To workarround this - you could do force-specify the compatibility libraries [since the compilers are fixed for fedora the libs are also fixed]:
--with-clib-autodetect=0 --with-fortranlib-autodetect=0 --with-cxxlib-autodetect=0 LIBS=-lgfortran
Note: for a mpi build with hypre - you might need -lstdc++ aswell.
BTW: for stuff in compiler search path - its best to not specify these paths.
For eg:
--with-metis-include=/usr/include could be --with-metis-include="" or --with-metis-include=[]
--with-metis-lib=/usr/lib64/libmetis.so could be --with-metis-lib=-lmetis
"--with-valgrind=1 --with-valgrind-dir=/usr" could be "--with-valgrind=1"
Satish
On Thu, 6 Oct 2016, Antonio Trande wrote:
> Hi all.
>
> I'm compiling PETSc 3.7.3 on Fedora; the libraries are built in 4
> different stages, each stage starting from a *clean PETSc source* directory:
>
> petsc src
> |
> v
> petsc src1 |--> serial libraries (link1)
> petsc src2 |--> serial (64bit INTEGER) libraries (link2)
> petsc src3 |--> OpenMPI libraries (link3)
> petsc src4 |--> MPICH libraries (link4)
>
> link1:
> http://copr-dist-git.fedorainfracloud.org/cgit/sagitter/petsc/petsc.git/tree/petsc.spec?id=ea7abab121859c66de05f70863950b4a6c5f7035#n402
>
> link2:
> http://copr-dist-git.fedorainfracloud.org/cgit/sagitter/petsc/petsc.git/tree/petsc.spec?id=ea7abab121859c66de05f70863950b4a6c5f7035#n559
>
> link3:
> http://copr-dist-git.fedorainfracloud.org/cgit/sagitter/petsc/petsc.git/tree/petsc.spec?id=ea7abab121859c66de05f70863950b4a6c5f7035#n682
>
> link4:
> http://copr-dist-git.fedorainfracloud.org/cgit/sagitter/petsc/petsc.git/tree/petsc.spec?id=ea7abab121859c66de05f70863950b4a6c5f7035#n842
>
> The resulting libraries look contain 'unused (strange) direct shared
> library dependencies'. Like for serial libpetsc.so:
>
> $ ldd -u /usr/lib64/libpetsc.so.3.7.3
> Unused direct dependencies:
> /lib64/libmetis.so.0
> /lib64/libhwloc.so.5
> /lib64/libhdf5.so.10
> /lib64/libquadmath.so.0
> /lib64/libstdc++.so.6
> /lib64/libgomp.so.1
>
> libmetis.so is (correctly?) activated with *--with-metis=1* option but
> results unused.
> libhwloc.so.5, libhdf5.so.10 and libstdc++.so shouldn't be linked.
>
> Here you can find a full build log on Fedora 24 64bit:
> https://copr-be.cloud.fedoraproject.org/results/sagitter/petsc/fedora-24-x86_64/00461492-petsc/build.log.gz
>
> RPMs built are:
> https://copr-be.cloud.fedoraproject.org/results/sagitter/petsc/fedora-24-x86_64/00461492-petsc/
>
> Do you have idea why this happens?
>
> Regards.
> ---
> Antonio Trande
> mailto: sagitter 'at' fedoraproject 'dot' org
> http://fedoraos.wordpress.com/
> https://fedoraproject.org/wiki/User:Sagitter
> GPG Key: 0x6CE6D08A
> Check on https://keys.fedoraproject.org/
>
>
More information about the petsc-dev
mailing list