3

我有一个简单的控制台应用程序,旨在从一个更大的项目中使用一个库。控制台应用程序是 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”每个答案,这是关于可可应用程序,但没有任何方法有帮助。 )

4

1 回答 1

1

正如上面的评论者解释的那样,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毫无问题地从终端运行。

于 2013-07-30T16:19:54.453 回答