1
我的.app包看起來是這樣的:包和dylib查找
MyApp.app/
Contents/
MacOS/
MyApp
libA.dylib
libB.dylib
libC.dylib
PlugIns/
PlugIn1.bundle/
...bundle contents
PlugIn2.bundle/
...bundle contents
兩個PlugIn1.bundle和PlugIn2.bundle是針對libA.dylib,libB.dylib和libC.dylib聯繫。三個dylib具有@ loader_path/libName.dylib的安裝名稱。然而,捆綁包找不到libA.dylib,libB.dylib或libC.dylib。我已經嘗試設置-bundle_loader標誌來鏈接主要的可執行文件,但這沒有幫助。捆綁包是否可以從.app包的MacOS文件夾查找dylib,而不必將它們複製到捆綁包中?
沒錯。如果您閱讀手冊頁dyld(1),它應該解釋爲什麼:loader_path是包含加載命令(PlugIn1)的二進制文件的路徑; executable_path是進程的主要可執行文件(MyApp)的路徑。在大多數情況下,很明顯哪一個是合適的 - loader_path /../../../ MacOS/libName.dylib比executable_path/libName.dylib複雜得多。 (當沒有一個看起來很簡單時,請查看-rpath。)(對不起,忽略了符號,但我不知道如何在評論中逃避它們) – abarnert 2012-04-30 18:03:33