2013-07-29 48 views
2

我有一个简单的控制台应用程序,旨在从更大的项目中锻炼库。控制台应用程序是XCode项目中的一个目标,它也包含库(以及其他一些目前我不关心的目标)。控制台目标通过将其列入“构建阶段”“目标依赖项”和“与库链接二进制文件”中来引用该库。如何在xcode之外运行objective-c控制台应用程序(使用库)?

我可以通过单击“运行”按钮并检查“所有输出”下的控制台输出,在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,这是关于一个可可应用程序,但都不是这样)

+0

你可以在捆绑中找到框架吗?也许你需要一个复制框架阶段 –

+0

@xlc - 唉,我甚至不知道这意味着什么。我来自GCC/MSVC背景,在那里编译它并运行它,然后才考虑附加一个调试器,所以我很奇怪它在环境中运行,但不在其外部。我会明天在谷歌上看到你的话,看看他们在哪里带领我! – Eric

+0

它在msvc世界中缺少DLL问题。找到'executable_path'的位置,并检查该文件是否存在'executable_path /../ Frameworks/[LIBRARY] .framework/Versions/A/[LIBRARY]' –

回答

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没有任何问题。

相关问题