启动应用程序时出错“库未加载”

时间:2013-03-02 10:56:12

标签: macos cocoa frameworks

我创建了一个使用RMSharedPreferences框架的Mac应用。打开应用程序时,它立即崩溃,我收到以下错误:

Dyld Error Message:
  Library not loaded: @rpath/RMSharedPreferences.framework/Versions/A/RMSharedPreferences
  Referenced from: /Users/USER/Desktop/MyApp.app/Contents/MacOS/MyApp
  Reason: image not found
似乎找不到框架。我已经尝试将复制文件阶段添加到目标,该目标应该复制框架,当在Finder中浏览应用程序的内容时,它似乎被正确复制。

有谁知道可能导致此错误的原因?

编辑:将框架设置为可选确实会使应用程序启动时没有任何错误应用程序无法完全正常工作。任何与RMSharedPreferences相关的调用都将被忽略。

Copy framework. Contents of app.

2 个答案:

答案 0 :(得分:10)

由于您将框架与应用程序捆绑在一起,因此应设置框架的安装位置。您可以在框架目标构建设置“安装位置”中设置它。使用类似的东西:

@executable_path

您也可以为框架使用单独的文件夹,然后使用:

@executable_path/../Frameworks/

如果您无法重建框架(这不是您的,但我的意思是一般),您可以修改预建的框架安装路径,如下所示:

install_name_tool -id @executable_path/../Frameworks/<framework_name> <your_framework>

Here you can find a reference for this.

如果要将框架捆绑到另一个框架中,可以使用@loader_path代替@executable_path

答案 1 :(得分:5)

@rpath是一个更灵活的关键字,建议使用它。

更好的方法是在Xcode中设置“Runpath Search Paths”构建设置。

这避免了需要额外的构建阶段脚本来修改框架。

例如,在您的情况下,您可以将“Runpath搜索路径”设置为

@executable_path/../Frameworks

@loader_path/../Frameworks

如果您尝试从框架内加载框架。