2012-10-23 47 views
9

我有一個應用程序,稱之爲Animal.app。其Contents/Frameworks文件夾內有一個框架,比如Mammal.framework。並且在框架的Versions/A/Frameworks文件夾中,我有dog.dylib。安裝名稱dog.dylib是@ rpath/dog.dylib。對於框架的"Runpath Search Paths"設置,我已指定@loader_path/../Frameworks。 (我爲這最後的設置理由是,該dylib的「裝載機」將是框架的二進制文件,在路徑Mammal.framework/Versions/A/Mammal)。@rpath嵌入在框架中的動態庫

我在運行時得到一個錯誤信息:

Dyld Error Message: 
    Library not loaded: @rpath/dog.dylib 
    Referenced from: /Volumes/VOLUME/*/Animal.app/Contents/MacOS/../Frameworks/Mammal.framework/Versions/A/Mammal 
    Reason: image not found 

我已經閱讀了Apple的「Run-Path Dependent Libraries」文檔,Mike Ash的博客文章@rpath,但我仍然看不出我做錯了什麼。

回答

6

事實證明,正確的運行路徑搜索路徑是@loader_path/Frameworks。我所缺少的是@loader_path表示的不是加載器的完整路徑,而是該路徑減去其最後一個組件。 Mike Ash's blog post確實說過,但我不知何故錯過了它。因此,對於框架,@loader_path以A.

+0

結尾是的,要清楚:嵌套的dylib及其父框架的安裝目錄應爲「@rpath」。然後,父框架在其運行路徑搜索路徑中包含「@ loader_path/Frameworks」(因爲dylib最終成爲Frameworks文件夾的同級);使用此框架的應用程序包含「@loader_path /../ Frameworks」(由於可執行文件在MacOS中關閉)。該應用程序也可以使用'@ executable_path',但'@ loader_path'看起來更酷:-) – natevw

+1

我不明白你實際做了什麼使它工作...像我一樣向我解釋它6. –

+2

@ Prof.Falken:在框架的構建設置中,在鏈接下,有一個名爲「運行路徑搜索路徑」的設置。我將它的值設置爲'@ loader_path/Frameworks'。 – JWWalker