2010-03-05 68 views
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,而不必將它們複製到捆綁包中?

回答

2

爲了得到這個工作,我必須將安裝名稱更改爲@ executable_path/libName.dylib

+0

沒錯。如果您閱讀手冊頁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