macos - 链接到框架

标签 macos cocoa frameworks linker dyld

我有许多框架链接到我的主项目,但由于某种原因,每当我在 Xcode 之外运行整个框架时,可执行文件根本找不到框架。

框架的动态安装路径设置为@loader_path/../Frameworks。我尝试过简单地输入@rpath,但它也不起作用。主可执行文件上的运行路径搜索路径为空。

有没有简单的方法来调试这个?我想我已经浏览了所有谈论框架链接的网站和博客文章,但没有任何帮助。

最佳答案

例如,如果您有一个构建阶段,将框架复制到您的应用程序包中......

Build Phase example

在您的应用程序build设置中.. 运行路径搜索路径 @executable_path/../Frameworks

在您的框架build设置中.. 动态库安装名称 @rpath/$(EXECUTABLE_PATH)

(其中宏 $(EXECUTABLE_PATH) 应扩展为类似 AFramework.framework/Versions/A/AFramework 的内容)

如果你弄错了,你的应用程序应该会在启动时崩溃。崩溃报告应该说类似

Dyld Error Message:
  Library not loaded: @rpath/TestyFramework.framework/Versions/A/TestyFramework
  Referenced from: /path/to/TestyApp.app/Contents/MacOS/TestyApp
  Reason: image not found

这应该可以帮助您确定值应该是什么以及框架应该在哪里

即在我的例子中,完整的运行路径搜索路径是..

/path/to/TestyApp.app/Contents/MacOS/TestyApp/../Frameworks

因此该库应该位于..

/path/to/TestyApp.app/Contents/MacOS/TestyApp/../Frameworks/TestyFramework.framework

关于macos - 链接到框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13445531/

相关文章:

java - mac os x 上的 eclipse JNI_CreateJavaVM 错误

python - 使用 Homebrew 软件在 Mac OS X 10.9 中构建 OpenCV_Python

c - 我应该释放 setlocale 返回的指针吗?

cocoa - 将对象添加到 NSArrayController 并将其保存到实体中

cocoa - 如何计算 NSTextView 中选定文本的正确坐标?

php - 您会为新的 Facebook 应用程序选择哪种 PHP 框架,为什么?

java - Apache Wicket 的缺点是什么?

c++ - Objective C 框架不导出某些类

macos - 获取文件夹(或子文件/文件夹)的最后修改日期和时间

objective-c - 在 NSTableView 中创建自定义单元格