2010-08-25 39 views
1

我看了一些相關的問題,似乎無法找到自己的解決方案。Xcode,建設和dylibs

基本上我在我的Xcode項目中使用libmp3lame.dylib。 lame的安裝過程會生成.dylib並將其放在usr/local/lib中,並讓Xcode生成並運行項目。我更改了「庫搜索路徑」以包含上述文件夾。這工作正常。

現在來製作一個發佈版本,並且我希望在捆綁包中包含.dylib,以便用戶不必忍受安裝階段或類似的任何事情。我創建了目標的複製文件階段,並將.dylib轉儲到軟件包內容的Frameworks文件夾中。但是,在二進制文件上運行otool顯示,不是在軟件包內部使用.dylib,編譯器已經將它鏈接到usr/local/lib版本(即使我刪除了該版本)。

查看otool輸出中的其他結果我有其他框架鏈接到束內,而不是.dylib。在Xcode中查看這些框架和.dylib的屬性,除了文件類型之外,我看不到任何差異。

我的搜索建議我需要使用rpath或類似的,但我不知道在Xcode中應用此位置。

回答

2

我對這個問題的解決方法是做終端以下(我用的Automator,好了,這個自動化):

install_name_tool -id @executable_path/../Frameworks/libmp3lame.0.0.0.dylib ~/path/to/lib/in/app/libmp3lame.0.0.0.dylib 

install_name_tool -change /usr/local/lib/libmp3lame.0.dylib @executable_path/../Frameworks/libmp3lame.0.0.0.dylib ~/path/to/app/Contents/MacOS/AppName 

基本上是從一個交換路徑到庫中的USR本地lib到捆綁包中的一個。

0

我的技巧是查看構建輸出,它如何實際運行ld?

+0

我猜測ld的相關部分是:「-lmp3lame.0.0.0」。 -l是否處理文件名本身的lib部分?否則我很困惑,因爲文件名是libmp3lame.0.0.0.dylib。 – Septih 2010-08-25 09:53:28

+0

啊,它的確如此。我認爲問題在於它在構建版本中定義的目錄(庫搜索路徑)中尋找libmp3lame.dylib,但複製文件階段不會將dylib放入該包中直到ld之後。所以新的困境是如何明確地告訴它在那裏尋找圖書館,而不是僅僅在幾個文件夾中尋找一個。仍然困惑,爲什麼它連接到usr/local/lib文件夾,當我刪除.dylib那裏雖然... – Septih 2010-08-25 10:19:45