我爲我的應用程序使用的一個組件要求使用-all_load作爲其鏈接程序標誌之一。但是,當我添加此標誌時,我從我的應用程序中使用的另一個庫中收到錯誤。當我歸檔應用程序,我得到以下錯誤:對某些庫使用-all_load,但對某些庫不使用
蘋果Mach-O的連接錯誤 64重複的符號體系結構armv7s
什麼是造成這種情況的解決方案?
我爲我的應用程序使用的一個組件要求使用-all_load作爲其鏈接程序標誌之一。但是,當我添加此標誌時,我從我的應用程序中使用的另一個庫中收到錯誤。當我歸檔應用程序,我得到以下錯誤:對某些庫使用-all_load,但對某些庫不使用
蘋果Mach-O的連接錯誤 64重複的符號體系結構armv7s
什麼是造成這種情況的解決方案?
只要刪除該標誌,並嘗試沒有它。如果仍然不起作用,請嘗試使用每個庫的--force-load。
不要嘗試運行沒有加載標誌的代碼。該標誌的原因是處理Apple鏈接器問題,其中ObjectiveC庫中的類別未得到正確處理。 嘗試切換到這一點:
-force_load $(BUILD_PRODUCTS_DIR)/libfoo.a
編輯:我看過,但沒有證實爲4.6的Xcode這不再是必要的。
David H的回答基本上是正確的,但在代碼示例中有兩個拼寫錯誤。鏈接器的參數應該是一個需要特殊的加載行爲庫如下:
-force_load $(BUILT_PRODUCTS_DIR)/libfoo.a
注:我也遇到過類似的情況在我的項目(使用的Xcode 4.6.1),但應用程序仍不會鏈接時既不指定-all_load
也不指定-force_load
(針對iOS5和iOS6)。
其他的一定是錯誤的,因爲你不應該得到鏈接器錯誤。這兩個標誌都指示運行時在應用程序啓動時採取一些操作。無論是否使用應用程序,All_load都會強制加載庫中的每個鏈接。 force_load標誌讓你只加載一個庫。然而,即使認爲它會鏈接,它會崩潰,因爲類別從未加載。 –
就我而言,我使用Apptentive和AdMob。 Apptentive需要啓用「-all_load」,AdMob要求它關閉。在我的情況下唯一的解決方案是將'-force_load/path/to/libApptentiveConnect.a'添加到鏈接器標誌。這是Xcode 4.6.1。所有其他選項不會鏈接。 –
您應該從Apptentive請求一個選擇性的force_load指令。告訴你使用all_load是荒謬的。你正在使用-ObjC標誌,對嗎? http://stackoverflow.com/a/6630019/1633251 –
如果您嘗試將AdMob v6.2添加到您的項目中,請閱讀以下內容:http://googleadsdeveloper.blogspot.com/2012/09/migrating-to-admob-v62-for-ios.html 幫助我昨天。 – krafter