用于libstdc ++的CMake`link_directories`。

时间:2015-06-08 01:23:23

标签: c++ cmake dynamic-linking libstdc++

我正在使用CMake的link_libraries代码指定({包含}特定版本libstdc++.so的文件夹的路径。

最初,在32位计算机上,这很好用:在内置但未安装的可执行文件上运行ldd <target>显示libstdc++.so指向所需的版本,我能够运行ctest以执行测试,即使系统libstdc++.so早于测试所需的时间。

但是,当我将代码移植到64位计算机时,所需的libstdc++.so路径不再包含在链接的可执行文件中。这迫使我(ab)使用LD_LIBRARY_PATH来运行项目的测试。

我试图用一个小的测试用例来复制这个问题,但是我无法在 平台上包含所需的路径,所以它可能是问题与32位到64位移植活动无关。但是,在32位平台上构建时,我已注释掉link_libraries行,并确认没有它,所需的库路径不包含。我还检查了很多次,以确保我为所需的64位库指定了一个有效的路径。

知道这里还会发生什么吗?

1 个答案:

答案 0 :(得分:0)

您可能希望了解RPATH选项:http://en.wikipedia.org/wiki/Rpath

  

基本搜索顺序为:[1]

     

DT_RPATH动态部分属性中的(以冒号分隔的)路径   二进制文件(如果存在)和DT_RUNPATH属性不存在。该   环境变量LD_LIBRARY_PATH中的(冒号分隔的)路径,   除非可执行文件是setuid / setgid二进制文件,在这种情况下它是   忽略。

您当然可以通过CMAKE_[EXE,SHARED,STATIC,MODULE]LINKER__FLAGS手动设置,例如

cmake -DCMAKE_SHARED_LINKER_FLAGS="-Wl,-rpath -Wl,/path/to/lib"

但也有可能使用CMake本身http://www.cmake.org/Wiki/CMake_RPATH_handling