2016-12-26 44 views
1

我是一個新的框架開發,這裏是我的情況。我構建了一個私有靜態庫,以提供給供應商來鏈接它。 #iOS#Objective-C編譯器是否會將產品二進制文件中從屬靜態庫中不相關的拱形符號去除?

目前,我只使用arch armv7和arm64構建我的庫,這應該適用於供應商在iOS設備中調試它並歸檔其應用程序,但不適用於在iOS Simulator中進行調試。模擬器需要x86_64(甚至iPhone 5模擬器中的i386)。禁用在模擬器中調試它的能力並不友好。我正在考慮爲他們提供一個靜態庫的胖架構。

這裏是action

lipo -create libSignatureLibary_armv6.a libSignatureLibary_armv7.a libSignatureLibary_i368.a -output libSignatureLibary.a 

合併操作之後,將輸出庫具有比單一個雙尺寸。

問題是,編譯器/ Xcode會將最終應用產品二進制文件中的i386和x86_64拱符號去掉嗎?如果沒有,胖拱庫會直接增加產品應用的尺寸,對吧?我應該爲供應商構建兩個版本的庫,一個用於調試,另一個用於存檔?這種情況的正確解決方案是什麼?

我不知道我應該谷歌什麼關鍵字,我沒有現有的產品應用程序鏈接它來驗證這一點,無論是。 (也許我應該建立一個新的。)

請幫助,謝謝!

回答

2

不要擔心,鏈接器只使用.o(可重定位的目標文件,它是彙編程序的輸出文件,當您構建靜態庫時,.m文件將被轉換爲.o文件。靜態庫是靜態庫中目標拱的可重定位目標文件的集合,因此在構建產品二進制文件時它將去除x86_64和i386 .o文件。

此外,鏈接器不會將未被編譯文件直接或間接引用的.o文件鏈接到可執行文件中。

+0

明白了,謝謝! :) – Itachi

+0

爲每個源文件(.m)生成可重定位目標文件,這是否意味着如果我沒有使用源文件中的任何符號,它會去掉未使用的類源文件? – Itachi

+0

它將去除靜態庫中未使用的可重定位目標文件。當你生成可執行文件時,'Build Phases-> Compiled Sources'中包含的所有源文件將被鏈接到可執行文件中。 – KudoCC

相關問題