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

5

我创建了一个使用 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相关的调用都会被忽略。

复制框架 应用程序内容

2个回答

10

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

@executable_path

你也可以为你的框架使用单独的文件夹,然后使用以下代码:
@executable_path/../Frameworks/

如果你不能重建框架(这不是你的,但我是一般性地说),你可以像这样修改预编译的框架安装路径:

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

在这里,您可以找到此内容的参考。

如果您要将一个框架捆绑到另一个框架中,可以使用@loader_path而不是@executable_path


这是一个很好的答案。将安装位置设置为@executable_path/../Frameworks解决了问题。非常感谢您的回答和对苹果文档的参考。 - simonbs

5

@rpath是一个更灵活的关键字,推荐使用。

更好的做法是在Xcode中设置“Runpath搜索路径”构建设置。

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

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

@executable_path/../Frameworks

或者
@loader_path/../Frameworks

如果您尝试从一个框架中加载框架。


1
您是指构建设置中链接会话下的“运行路径搜索路径”吗? - Balazs Nemeth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接