[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