dyld:未加载库:在OS X上

时间:2015-04-22 21:20:08

标签: c++ macos

我正在使用OS X中的命令行使用g ++构建,而不是使用XCode。当我构建我的可执行文件时,我必须将链接器标志包含在存储动态库的库中,但是当我去运行可执行文件时,找不到动态库,我收到错误dyld: Library not loaded: (foo)

这里已经有一些关于特定软件包的动态库以及如何在XCode项目中构建动态库的问题,但没有一般性解释Mac OS X如何查找动态库以及如何获得新的.dylib进入可执行文件的搜索路径。

有人可以填补这个空白。当使用可执行文件构建动态库时,Mac OS X如何查找动态库?如何在正确的位置放置到动态库的链接以便可执行文件运行?

我在OSX 10.9上 - 小牛队。

1 个答案:

答案 0 :(得分:3)

一个好的起点是Dynamic Library Programming Topics上的Apple文档 尤其是Run-Path Dependent Libraries

“当动态加载程序(dyld)加载可执行文件时,它会按照链接时指定的顺序在运行路径搜索路径中查找与运行路径相关的库。”

第一个想法是使用otool检查二进制文件库的依赖关系:

otool -L /path/to/binary

然后,根据您希望如何分发库,您有不同的解决方案。

您可以在二进制文件中指定库的绝对路径。它应该使用一个工具,例如CMake。否则,您可以使用

install_name_tool to change the path to a library by hand.

大多数情况下,您希望部署二进制文件并将dylib放在一个单独的文件夹中。这些库相对于二进制文件的位置加载。 例如:

    @loader_path/../Frameworks/Sparkle.framework/Versions/A/Sparkle

有关路径的详细信息,建议您阅读this blog