2011-12-06 26 views
1

我仍然不能100%確定框架鏈接過程,但從我之前在這裏看到的沒有人提出類似問題之前,也許是因爲這可能是一個愚蠢的問題,但我會繼續努力。包括一個框架,但沒有將其嵌入到應用程序包中

在我當前的X-Code項目中,我使用了一個自定義框架,比如example.framework。就目前而言,就我所知,爲了使程序能夠與框架一起工作,我需要將它放在/ Library/Frameworks中,或者我需要將它複製到構建中的bundle資源中相。

有人會知道如何將框架添加到可執行文件中,因此我不必將原始框架與應用程序一起包含在項目中?我寧願不分享整個框架...

先謝謝您!任何建議也歡迎!

+1

聽起來像你真正需要鏈接的是一個靜態庫。這對你來說是一種選擇嗎? 「框架」基本上是動態庫的一個奇特名稱。 –

+0

當然,我想是的。唯一的問題是該框架還在其中使用了一個包。理想情況下,我希望將bundle的可執行文件和框架的可執行文件編譯到我的可執行文件中,而不是同時包含框架和捆綁包,以及清晰的頭文件......您對此有何建議? – Tiago

回答

1

Mac OS X框架基本上是一個共享庫,意味着它是一個單獨的二進制文件。

基本上,當您的主要可執行文件啓動時,操作系統會將框架/ dylib加載到內存中,並映射這些符號,以便您的主要可執行文件可以訪問它們。

請注意,框架/ dylib(捆綁到應用程序或不捆綁),不需要包含頭文件,因爲這些只在編譯時需要。使用Xcode,當您將框架複製到其安裝目錄(請參閱您的構建階段)時,實際上可以決定是否包含頭文件。

enter image description here

如果你不復制的頭文件,人們將無法使用你的框架/ dylib(除非它們反向工程,當然)。

如果您仍然認爲某個框架不適合您的需求,您可能需要改爲創建一個靜態庫。

靜態庫是一個單獨的對象文件(通常是.a),它在鏈接時與您的最終二進制文件「包含」在一起。

這樣,您只有一個二進制文件,其中包含來自庫和代碼的代碼。