15

那是我的错误:

dyld: Library not loaded: /usr/local/lib/libofa.0.dylib
Referenced from: /sers/david/Projekte/Test/build/Debug/Test.app/Contents/MacOS/Test
Reason: image not found

我做了一些研究并使用 install_name_tool 更改了 dylib 内的路径:

davids-macbook:Test david$ otool -L libofa.0.0.0.dylib 
libofa.0.0.0.dylib:
@executable_path/../Frameworks/libofa.0.0.0.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.1)
/System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate (compatibility version 1.0.0, current version 4.0.0)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.9.0)

但是 Xcode 一直在 /usr/lib/ 中搜索它:

build/Debug/Test.app/Contents/MacOS/Test:
/System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 15.0.0)
/System/Library/Frameworks/AudioToolbox.framework/Versions/A/AudioToolbox (compatibility version 1.0.0, current version 1.0.0)
/opt/local/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.5)
@executable_path/../Frameworks/TagLib.framework/Versions/A/TagLib (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/QTKit.framework/Versions/A/QTKit (compatibility version 1.0.0, current version 1.0.0)
/opt/local/lib/libexpat.1.dylib (compatibility version 7.0.0, current version 7.2.0)
/System/Library/Frameworks/Quartz.framework/Versions/A/Quartz (compatibility version 1.0.0, current version 1.0.0)
/opt/local/lib/libcurl.4.dylib (compatibility version 7.0.0, current version 7.0.0)
/usr/local/lib/libofa.0.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.9.0)
/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 103.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.0)
/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 227.0.0)
/System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices (compatibility version 1.0.0, current version 44.0.0)
/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 550.29.0)
/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 751.29.0)
/System/Library/Frameworks/AppKit.framework/Versions/C/AppKit (compatibility version 45.0.0, current version 1038.32.0)

有没有办法在 Xcode 中设置这个???谢谢

编辑:该库不是 Xcode 项目。它使用 ./configure 构建;制作

4

3 回答 3

23

通常我做的是这样的:

  1. 将库的安装目录@rpath设置为. 这会将安装名称设置为@rpath/libofa.0.0.0.dylib. 如果你自己构建库,你可以在 Xcode 中设置它;否则,用于install_name_tool更改它。
  2. 将使用该库的应用程序的运行路径搜索路径设置为包含该库的目录的位置。例如,如果您将库放在应用程序的 Frameworks 目录中,则将Runpath Search Paths设置为@executable_path/../Frameworks(或@loader_path/../Frameworks)。

这篇博文这篇博文更详细。

于 2011-02-02T16:12:13.053 回答
8

确保从 developer.apple.com 安装命令行工具,然后将库添加到您的项目中。在您的 Xcode 中运行以下脚本:目标 » 构建阶段 » 运行脚本并执行:

install_name_tool -id @executable_path/../Frameworks/librayName.dylib "$SRCROOT/librayName.dylib"

注意:在 dylib 名称之前不需要 ' 或 ""

于 2013-10-08T10:32:29.107 回答
4

在寻求解决方案之前,您应该知道 MAC 中的依赖库“dylib”与 Windows 中的依赖库“dll”相比有何新意。

dylib 与 dll 的主要区别是“安装名称”。安装名称是嵌入到动态库中的路径,它说明在运行时在哪里可以找到库。无论您将 dylib 复制到何处,它都将始终指向旧路径(除非不更改安装名称)。您可以使用以下命令知道原始搜索路径(安装名称)

otool -L a.dylib

(只需拖动 dylib 代替 a.dylib)

有关安装名称的更多详细信息,请参阅此链接

现在,更改 dylib("install name") 新位置的解决方案install_name_tool如下所示

install_name_tool -change *old path of dylb* *new path of dylib*

您已经可以通过otool -L上述命令获取旧路径。(旧路径即原始路径)

install_name_tool -change也可以更改 dylib 和可执行文件的搜索路径。

您可以通过在Run script项目中写入文件来在 Xcode 中使用它。

于 2014-10-29T14:44:15.293 回答