我正在使用CMake的link_libraries代码来指定libstdc++.so特定版本的路径(包含的文件夹)。
最初,在32位计算机上,这很好:在构建但未安装的可执行文件上运行ldd <target>显示libstdc++.so指向所需的版本,并且我能够运行ctest来执行测试,即使系统libstdc++.so比测试所需的更早。
但是,当我将代码移植到64位计算机时,所需的libstdc++.so路径不再包含在链接的可执行文件中。这迫使我使用LD_LIBRARY_PATH来运行项目的测试。
我试图用一个小的测试用例来复制这个问题,但是我无法让它在任何一个平台上包含所需的路径,所以这个问题可能与32位到64位的移植活动无关。但是,在32位平台上构建时,我已经注释掉了link_libraries行,并确认如果没有它,所需的库路径就不包括在内。我还多次检查以确保为所需的64位库指定有效路径。
你知道这里还会发生什么吗?
发布于 2015-06-08 06:00:44
您可能想了解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本身的handling。
https://stackoverflow.com/questions/30700109
复制相似问题