2015-11-04 81 views
2

我遇到過多個網站描述該框架可以包含靜態以及動態庫。但是,如何確定框架實際包含的是動態庫還是靜態庫。我首先想到了擴展的幫助(.a用於靜態庫,.dylib用於動態庫),但我在框架內看到的所有內容都是針對打包的二進制文件提供的擴展。有什麼方法可以找到它是靜態庫還是動態庫。框架在IOS中包含靜態或動態庫裏面

而且我看了蘭登富勒上的靜態庫http://landonf.bikemonkey.org/code/ios/Radar_15800975_iOS_Frameworks.20140112.html 其中他提到框架庫提供兩級命名空間,但它包括正常調試符號,而不是僅僅依賴關係和它的內部框架打包靜態庫,即使工作職位。

E.x.如果我在框架內以及與其鏈接的項目代碼庫中具有相同的調試符號,會發生什麼情況。在這種情況下,兩個級別的命名空間會起作用

另外根據此作者http://ddeville.me/2014/04/dynamic-linking/ 框架是一個包或動態庫,包含頭文件和資源的包。

根據以下帖子Library? Static? Dynamic? Or Framework? Project inside another project 它說框架可以包含靜態和動態庫。

我對此很困惑。有人可以在iOS中解釋框架,瞭解它們包含的內容以及它們如何在兩級別名稱空間方面的工作。

回答

0

要回答您的問題的第一部分,是的,您的理解是正確的,即框架只是捆綁庫圖像(編譯的機器代碼,標題,資源等)的目錄結構。要驗證框架實際上是一個靜態庫或動態使用下面的命令

file Path/To/YourLib.framework/YourLib 

如果一個特定的架構(ARMv7的,arm64等)的輸出稱ar archive其靜態庫,在另一方面,如果任何它說dynamically linked shared library架構,然後它毫不意外地是一個動態庫。

如果您自己創建Framework項目,您可以通過設置項目的Mach-O Type構建設置來選擇構建靜態或動態圖像。

如果在多個地方定義相同的符號(例如函數名稱),則存在不同的可能性。在幾乎所有情況下,行爲都會導致一個鏈接時間錯誤,抱怨多個符號異常是動態鏈接的框架,在這種情況下,您可能會看到不一致的行爲,其中符號將從動態框架加載到內存中。