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

标签 objective-c xcode

我有一个简单的控制台应用程序,旨在从一个更大的项目中运行一个库。控制台应用程序是 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/

相关文章:

ios - Xcode 项目旁边的不同图标是什么意思?

ios - "libRestKit.a, file was built for archive which is not the architecture being linked (armv7)"

IOS:如何检测配对的蓝牙 3.0 设备的品牌/型号?

objective-c - 从子类 WebView 更改 Window 的元素可见性

ios - 将任务分派(dispatch)到队列中以便在另一个线程中运行任务

objective-c - 如何将KVC集成到MVC中?

objective-c - OSX 应用程序崩溃 : code signature invalid

iphone - 两个图像之间的碰撞计数器的问题

iphone - iOS SDK 中的 Facebook 照片大小

iphone - UIPickerView行图片选择高亮颜色