dyld:库未加载:在 OS X 上

dyld: Library not loaded: on OS X

本文关键字:OS 加载 dyld      更新时间:2023-10-16

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

这里已经有几个关于与特定软件包相关的动态库以及如何将动态库内置到 XCode 项目中的问题,但没有通用解释 Mac OS X 如何查找动态库以及如何将新的 .dylib 放入可执行文件的搜索路径中。

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

我在OSX 10.9 - 小牛队。

一个好的起点是关于动态库编程主题的 Apple 文档尤其是运行路径依赖库。

"当动态加载程序 (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

有关路径的更多信息,我建议您阅读此博客。