我正在處理鏈接幾個靜態庫的iOS應用程序。挑戰在於,這些鏈接庫定義了不同實現的相同方法名稱。奇怪的是,我沒有得到任何duplicate symbol definition
錯誤;但毫不奇怪,我最終只能訪問該方法的一個實現。在靜態iOS庫中重寫符號
更清楚,說我有力霸和libB,他們都定義一個全局的C法稱爲FUNC1()
當我鏈接都力霸和libB,做出FUNC1(通話),它解析到libA或libB的實現,沒有任何編譯警告。但是,我需要能夠分別訪問libA的func1()和libB的func1()。
There's a similar SO post,解釋它如何可以在C完成(通過符號重命名),但不幸的是,我發現,objcopy
工具不會對ARM架構(因此iPhone)工作。
(我將它提交到App Store,因此,動態鏈接不是一個選項)
如果你有任何庫的源代碼,那麼解決方案是顯而易見的。或者,你可以使用'lipo'將兩個庫打包成一個,如果我的內存不足,應該只保留其中一個符號。 – 2013-03-11 18:09:36
謝謝@ RichardJ.RossIII,但我沒有源代碼,不確定你的建議會有幫助,因爲我想分開保存這些符號,我需要它們兩個,我不想將它們還原爲一個符號 – 2013-03-11 19:19:02
我會比如說使用'dlopen'和'dlsym'動態地分別加載符號,但不幸的是,現在蘋果禁止使用這些符號,這將不起作用。我不是''.a'文件結構的專家,但我有一種感覺,可以通過十六進制編輯器手動執行此操作。讓我嘗試一下,我會看看我能否幫助你。 – 2013-03-11 19:24:37