我们有一些间接依赖的链接问题。根据我在网上阅读的内容猜测,这可能是因为使用了两级命名空间。 当我们链接到一个 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/