首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CMake `link_directories` for libstdc++.so

CMake `link_directories` for libstdc++.so
EN

Stack Overflow用户
提问于 2015-06-08 01:23:22
回答 1查看 1.5K关注 0票数 1

我正在使用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位库指定有效路径。

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

EN

回答 1

Stack Overflow用户

发布于 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手动设置它。

代码语言:javascript
复制
cmake -DCMAKE_SHARED_LINKER_FLAGS="-Wl,-rpath -Wl,/path/to/lib"

但是也有可能使用CMake本身的handling

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30700109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档