Objective c 如何在命令行实用程序中使用动态加载库?

Objective c 如何在命令行实用程序中使用动态加载库?,objective-c,cocoa,xcode,Objective C,Cocoa,Xcode,可能重复: 哎, 我已经编写了一个广泛使用RegexKit.framework的命令行“基础工具”。在Xcode中运行时一切都正常,但如果我编译发布版本并尝试在Terminal中运行,则会出现以下错误: dyld: Library not loaded: @executable_path/../Frameworks/RegexKit.framework/Versions/A/RegexKit 仔细检查发现RegexKit.framework捆绑包与我的可执行文件位于同一目录中。。。我做了一些

可能重复:

哎,

我已经编写了一个广泛使用RegexKit.framework的命令行“基础工具”。在Xcode中运行时一切都正常,但如果我编译发布版本并尝试在Terminal中运行,则会出现以下错误:

dyld: Library not loaded: @executable_path/../Frameworks/RegexKit.framework/Versions/A/RegexKit
仔细检查发现RegexKit.framework捆绑包与我的可执行文件位于同一目录中。。。我做了一些研究,我认为由于命令行工具不使用应用程序包,所以Xcode无法将框架复制到任何地方。所以我猜我需要将框架编译为一个静态库,并将其包含在我的代码中。。。我说得对吗?如果是的话,我该怎么做呢?我可以在终端中做些什么,从外部指向框架吗

任何帮助都会得到极大的回报,我已经为此绞尽脑汁好几天了

提前感谢,


汤姆

所以。。。最后,我使用不同的安装目录(在部署部分,在目标信息的Build选项卡下)重新编译框架——我将其设置为just@executable\u path

然后我编译了框架并替换了Utilitie项目中的框架,我还更改了复制文件构建阶段,将框架复制到“可执行文件”而不是框架

好消息是,这修复了我原来的问题——但显然,框架必须与可执行文件位于同一目录中


所以这让我很不顺利,但我仍然很想知道如何静态编译RegexKit.framework

您不应该在捆绑包的可执行文件夹中安装框架。它应该在Frameworks文件夹中。在项目中需要一个复制框架的复制文件阶段,并且需要将目标设置为“框架”。“仅在安装时复制”应取消选中

在测试时,您应该确保执行干净的构建。我通常会删除build文件夹,而不是使用Xcode的Clean菜单选项,因为它更快更全面

另外:您不能静态链接到框架。如果您想静态链接到某个东西,它需要是一个静态库,所以在本例中,您需要使用RegexKit。请记住,静态库不能包含资源,而作为捆绑包的框架可以