链接到特定版本的库

时间:2015-05-26 17:22:12

标签: cmake makefile ld

我将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执行以下操作。

  1. 链接库以使用特定版本。例如,-l:libboost_mpi.so.1.57.0
  2. 明确指定此版本-L library path的库路径。它不应该与/ usr / lib64下的库链接。
  3. Ramki

1 个答案:

答案 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,而是链接到正确版本的库。