2012-12-06 20 views
13

在構建Objective-C靜態庫時,我注意到.a文件(來自模擬器和iPhone的胖文件)非常大。特別是,它最初是5.7MB。我發現this post並將我的編譯設置Generate Debug Symbols設置爲否,將lib大小減小到1.7mb。減少objective-c中靜態庫大小的最佳實踐是什麼?

這是一個很大的改進,但還有什麼可以做的嗎?單獨的實現和頭文件佔用大約100kb。

回答

16

萬一它是您關心的一部分,靜態庫就是相關的.o文件一起歸檔並加上一些簿記。所以1.7mb靜態庫 - 即使其中的代碼是整個1.7mb - 通常不會將1.7mb添加到您的產品。關於死代碼剝離的通常規則將適用。

除此之外,您可以減少代碼的內置大小。以下可能不是一個全面的列表。

在您的目標的構建設置中查找「優化級別」。通過將其轉換爲'最快,最小-Os',您將允許編譯器犧牲一定的速度。

確保您正在構建拇指更緊湊的ARM代碼。假設您使用LLVM,這意味着確保您的項目設置中沒有任何地方有-mno-thumb

還要考慮要爲其構建哪種體系結構。 Apple不允許提交支持ARMv6和iPhone 5屏幕的應用程序,並完全從最新的Xcode中刪除ARMv6支持。所以在這一點上可能沒有意義。

+0

+1指出庫管理員的大小不會完全增加到二進制大小,因爲鏈接器通常會優化大時間。 – Till

+0

謝謝@Tommy。這清理了很多 – johngraham

+0

@Tommy如果用戶指定-all_load或-force_load,會發生什麼? – klefevre

相關問題