2013-07-29 72 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沒有任何問題。

相關問題