我将boost库与我的.cpp文件链接起来。构建机器在/ usr / lib64中提升了1.55,我在本地目录中提升了1.57。 cmake生成以下链接命令。
/home/ramki/mpich-install/bin/mpicxx -fopenmp -fexceptions -fno-use-linker-plugin CMakeFiles/factor.dir/factor.cpp.o CMakeFiles/factor.dir/factor_jobs.cpp.o -o factor -rdynamic -lboost_serialization -lboost_iostreams -lboost_program_options -lboost_mpi -llapack -llapacke -lblas -lpthread -lm -lz factorization/libfactorization.a
上述链接命令未指定boost库的版本。因此,我收到以下错误。
/usr/bin/ld: warning: libboost_serialization.so.1.57.0, needed by /home/ramki/libraries/boost_1_57_0//lib/libboost_mpi.so, may conflict with libboost_serialization.so.1.55.0
由于链接的这种性质,当我使用ldd转储可执行文件的链接库时,我看到它链接了几个libboost 1.55库。如果我运行此可执行文件的机器没有boost 1.55,它根本不启动。
在CMakeLists.txt和CMakeCache.txt中,我看到find_package正在发现1.57库。
find_package(Boost 1.57.0 COMPONENTS serialization iostreams program_options mpi REQUIRED)
。
但是在链接期间,它不会引入库的版本。如何指示cmake执行以下操作。
-l:libboost_mpi.so.1.57.0
-L library path
的库路径。它不应该与/ usr / lib64下的库链接。 Ramki
答案 0 :(得分:1)
不确定这是否适用于其他库。在boost,set(Boost_REALPATH ON)上的find_package之前获得提升。这将设置Boost_LIBRARIES的完整路径为
/export5/home/ramki/libraries/boost_1_57_0/lib/libboost_serialization.so.1.57.0;/export5/home/ramki/libraries/boost_1_57_0/lib/libboost_iostreams.so.1.57.0;/export5/home/ramki/libraries/boost_1_57_0/lib/libboost_program_options.so.1.57.0;/export5/home/ramki/libraries/boost_1_57_0/lib/libboost_mpi.so.1.57.0
。
将此Boost_LIBRARIES与target_link_libraries一起使用(目标$ {Boost_LIBRARIES})。因此,我们不是链接到可能链接到其他版本的libboost_mpi.so,而是链接到正确版本的库。