2011-03-04 35 views
0

我的一個Mac應用程序包含一個嵌入到應用程序包中的框架。現在我發現一些證據表明,在某些客戶機器上,應用程序鏈接到位於/ System/Library/Frameworks文件夾中的相同框架。嵌入式框架與位於包之外的版本衝突

我顯然失去了一些東西,當涉及到連接嵌入式框架,在Xcode中的應用,所以在這裏是如何我已經做到了..也許你可以點我缺少的步驟:

1 )我將框架項目拖到我的項目中,並建立了兩個項目之間的依賴關係 2)將框架項目的構建產品拖到我的目標的「Link Binary with Libraries」構建階段 3)將構建產品框架項目的「複製框架文件」構建階段我的目標設置爲「目標:框架」

這一切都很好,但有些在我需要指定我想要與框架的嵌入版本鏈接而不是可能在系統上找到的任何框架版本的情況下。有沒有在某處設置搜索路徑?或「靜態」鏈接?

任何幫助,將不勝感激。

最好的問候,

弗蘭克

回答

1

聽起來像是你可能缺少了關鍵的一步。您還需要設置嵌入式框架的「安裝名稱」

當您鏈接框架或動態庫時,您的應用程序將在由框架的安裝名稱指定的路徑中查找框架。這應該爲嵌入式框架指定一個相對路徑。如果它是一個絕對名稱,即使您嵌入了該庫,它也會選取系統安裝的版本。

要檢查安裝名稱,請執行以下操作並查看第一個位置。

otool -L <framework-binary> 

這兩個博客文章解釋問題,以及如何正確的一切設置:

此外,如果您正在編譯從dylib命令行(比如開源庫)只需將以下內容添加到您的CFLAGS中即可設置安裝名稱。

-install_name '@rpath' 

如果要修改現有的二進制文件的名稱安裝使用「install_name_tool」。

還要確保您的副本文件構建階段是將正確的文件複製到應用程序包中的正確位置。

+0

謝謝..對不起,對於遲到的答覆..它看起來像我的框架路徑實際上設置正確(@executable_path /../ Frameworks/BGHUDAppKit.framework/Versions/A/BGHUDAppKit),所以我認爲這個問題顧客機器可能是由於與普通裝載機「搞砸」的緣故。 – 2011-03-14 13:10:10