2014-02-18 18 views
6

-all_load-ObjC不同。在我的項目中,兩者的行爲方式都是一樣的。-all_load和-ObjC之間的區別

+0

可能重複的[all -all \ _load鏈接器標誌做什麼?](http://stackoverflow.com/questions/2906147/what-does-the-all-load-linker-flag-do) – Amar

+1

@阿馬爾:請理解這個問題。我問兩個標誌之間的區別。 – Rajesh

+0

它們之間的差異是關於一個錯誤,在Midhun的答案中以及我已經鏈接的問題的接受答案中提到。瀏覽該答案中提到的[Apple技術說明](https://developer.apple.com/library/mac/qa/qa1490/_index.html)。 – Amar

回答

9

-ObjC

此標誌會導致鏈接器加載每個目標文件中定義了一個Objective-C類或類別的庫。

-all_load

對於64位和iPhone OS應用程序,有一個接頭的錯誤,以防止從-ObjC裝載從僅包含類別和無類的靜態庫的對象文件。解決方法是使用-all_load-force_load標誌。 -all_load強制鏈接從每一個存檔看到,即使是那些沒有Objective-C代碼

參考Building Objective-C static libraries with categories

+0

你說得對,這兩個標誌都用來加載所有的目標文件。但我不知道區別。 – Rajesh

+2

@ user1554347:區別在於:對於64位和iPhone OS應用程序,存在一個鏈接器錯誤,它會阻止-ObjC從僅包含類別和類別的靜態庫中加載對象文件。解決方法是使用-all_load'。沒有其他區別,AFAIK。 –

+0

該引用不再引用-all_load,顯然是因爲需要-all_load的問題已經修復了一段時間。 –

5

man ld加載所有對象文件...

-all_load Loads all members of static archive libraries. 
-ObjC  Loads all members of static archive libraries that implement an Objective-C 
       class or category. 

-ObjC不會畫來自所有靜態庫的所有符號,如-all_load會。