gpt4 book ai didi

objective-c - 如何在 xcode 之外运行 objective-c 控制台应用程序(带有库)?

转载 作者:搜寻专家 更新时间:2023-10-30 20:25:16 24 4
gpt4 key购买 nike

我有一个简单的控制台应用程序,旨在从一个更大的项目中运行一个库。控制台应用程序是 XCode 项目中的一个目标,该项目还包含该库(加上我现在不关心的其他一些目标)。控制台目标通过在构建阶段“目标依赖项”和“将二进制文件与库链接”中列出来引用库。

通过单击“运行”按钮并检查“所有输出”下的控制台输出,我可以在 XCode 中正常运行控制台程序。

但是,如果我尝试在 XCode 之外运行,则会出现加载错误。我在项目导航器中选择“产品”下的控制台应用程序,然后在信息面板的“身份”部分找到“完整路径”。当我将此路径复制到终端窗口并运行它时,出现如下错误:

dyld: Library not loaded:
@executable_path/../Frameworks/[LIBRARY].framework/Versions/A/[LIBRARY]
Referenced from: [THE PATH THAT I TYPED]
Reason: image not found

我应该采取哪些不同的措施来让我的控制台应用程序从控制台执行?

(请注意,在“复制文件”阶段,我尝试将“子路径”留空并将其设置为“@executable_path/../Frameworks”每this answer,这是关于一个 cocoa 应用程序,但两者都不是方式有所帮助。)

最佳答案

正如上面的评论者所解释的,dyld 是动态加载器,它正在它打印的路径中寻找我的库。 (当它说 @executable_path 时,它表示我实际尝试运行的控制台应用程序的位置。)

查看 XCode 的编译输出,我看到如下文件夹层次结构:

Debug/
MyProgram
Frameworks/[LIBRARY].framework/Versions/A/[LIBRARY]

无论出于何种原因,此结构都不符合加载器的要求——它正在 ../Frameworks 而不是 ./Frameworks 寻找库。

我没有弄乱加载程序使用的环境变量或尝试调整程序本身,而是将这些文件复制到一个新文件夹,其结构在错误消息中指定:

foo/
bin/MyProgram
Frameworks/[LIBRARY].framework/Versions/A/[LIBRARY]

我现在可以毫无问题地从终端运行 foo/bin/MyProgram

关于objective-c - 如何在 xcode 之外运行 objective-c 控制台应用程序(带有库)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17935327/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com