[CMake] Is there a way to disable adding extra libraries at the end of a link line?

JR Cary cary at txcorp.com
Fri Dec 18 11:12:35 EST 2015


Working on a just delivered Cray I am again challenged by the way that
CMake adds libraries to the end of the link line that I did not specify.

The Cray requires use of the compiler wrappers.  After adding the
appropriate libraries (hdf5, z) to my target, the link line is

/opt/cray/craype/2.4.2/bin/CC   -DMPICH_IGNORE_CXX_SEEK -std=c++11 -O3 
-DNDEBUG -msse2   CMakeFiles/io.dir/io.cxx.o  -o io 
-L/opt/cray/hdf5-parallel/1.8.14/INTEL/14.0/lib  ../libtxio.a 
../../txstreams/libtxstreams.a 
/opt/cray/hdf5-parallel/1.8.14/INTEL/14.0/lib/libhdf5.a -Wl,-Bstatic -lz 
-Wl,-Bdynamic /opt/cray/hdf5-parallel/1.8.14/INTEL/14.0/lib/libhdf5.a 
-Wl,-Bstatic -lz -Wl,-Bdynamic 
-Wl,-rpath,/opt/cray/hdf5-parallel/1.8.14/INTEL/14.0/lib

and the link fails with

ld: dynamic STT_GNU_IFUNC symbol `strcmp' with pointer equality in 
`/usr/lib/../lib64/libc.a(strcmp.o)' can not be used when making an 
executable; recompile with -fPIE and relink with -pie

Now I believe that Cray has the appropriate libraries in its compiler 
wrapper, because
if I just link without all the additions:

/opt/cray/craype/2.4.2/bin/CC   -DMPICH_IGNORE_CXX_SEEK -std=c++11 -O3 
-DNDEBUG -msse2   CMakeFiles/io.dir/io.cxx.o  -o io 
-L/opt/cray/hdf5-parallel/1.8.14/INTEL/14.0/lib  ../libtxio.a 
../../txstreams/libtxstreams.a 
/opt/cray/hdf5-parallel/1.8.14/INTEL/14.0/lib/libhdf5.a  -lz

it all just works.

Is there a way to tell cmake not to append
"-Wl,-Bdynamic /opt/cray/hdf5-parallel/1.8.14/INTEL/14.0/lib/libhdf5.a 
-Wl,-Bstatic -lz -Wl,-Bdynamic 
-Wl,-rpath,/opt/cray/hdf5-parallel/1.8.14/INTEL/14.0/lib"
to the link line and not to insert -Wl,-Bstatic in front of -lz
?

Thx....John Cary



More information about the CMake mailing list