[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