c++ - 与 Mac OS X 上的间接依赖关系的链接问题

标签 c++ macos boost linker

我们有一些间接依赖的链接问题。根据我在网上阅读的内容猜测,这可能是因为使用了两级命名空间。 当我们链接到一个 boost 库时会发生这种情况,准确地说是 boost_filesystem,它本身依赖于 boost_system。链接器不解析 boost_filesystem 和 boost_system 之间的依赖关系。 有人可以给我一些提示如何解决这个问题吗?将 boost_system 手动添加到依赖项中感觉很丑陋,此外,它在其他平台上工作正常。

最佳答案

Mac 上的某些版本的静态链接编辑器 ld 不通过 -L 选项解决间接依赖关系,而是简单地通过嵌入到直接依赖关系中的 install_name 查找它们。在 boost_filesysten 上运行 otool -L 会告诉你 ld 在哪里寻找 boost_system。

您可以使用 install_name_tool 更改 install_name 或使用

-dylib_file 安装名:文件名

ld 的选项,这只是告诉 ld 的一种方式,每当它遇到与冒号之前的参数部分匹配的 install_name 路径时,它实际上应该从冒号之后的路径中获取该库。

我认为较新版本的 ld 现在确实支持 -L 以实现对 Mac 的间接依赖,但我不确定。我只使用了 10.4,它的 ld 忽略了 -L 的间接依赖关系,我使用 -dylib_file 来摆脱其他人为解决您描述的问题而放入的许多幻影显式依赖关系!

关于c++ - 与 Mac OS X 上的间接依赖关系的链接问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/439727/

相关文章:

c++ - linux上大号货币(或数字)的Qt语言环境格式化

C++ Smooth player - 墙壁 - 碰撞(靠墙滑动)

c++ - CreateRemoteThread:内存管理

c++ - 为什么 g++ 在编译时给我冲突错误?

c++ - 在终端应用程序中使用 opengl ( 没有 glut/glew )

c++ - boost::any 不能转换回 std::function

macos - 如何使用 Mac 开发者 ID 签署 Qt 应用程序?

c++ - 如何检测 Linux/MacOs 平台中的内存泄漏?

c++ - 如何将 Boost 与 Eclipse 一起使用?

c++ - 如何使用 boost::property_tree 解析带根数组的 JSON