4

我有一個基於Cocoa的通用動態庫,還包括更多的靜態庫,我想從中導出功能。看來我不能在沒有使用導出符號文件的情況下執行最新操作,這對我來說很好......不知何故。我不使用任何設置「默認情況下隱藏的符號」(GCC_SYMBOLS_PRIVATE_EXTERN,-fvisibility = hidden)。 當我試圖從動態庫中導出基類時,更具體地說,當試圖使用庫中未包含的派生類中的成員,甚至更具體地說是64位版本時,出現此問題: 「 未定義的符號: 「_OBJC_IVAR _ $ _ PluginBase.fConn」 「 我知道64位的變化:http://developer.apple.com/library/mac/#releasenotes/Cocoa/RN-ObjectiveC/_index.html,部分‘64位類和實例變量的訪問控制’導出符號文件:Objective C派生類成員,64位

,當然,一切正常,如果我添加_OBJC_IVAR _ $ _ PluginBase.fConn到導出文件...但只適用於64位版本,32位版本不知道這樣的事情: 「 未定義的符號: 「_OBJC_IVAR _ $ _ PluginBase.fConn」,從引用: -exported_symbol [s_list]命令行選項 「

唯一的解決辦法似乎是另一個解決方法:有兩個導出文件。但是...我無法使用EXPORTED_SYMBOLS_FILE設置中的「添加生成設置條件」:-S。

任何想法(除了使用公共存取方法)?

回答

1

您可以使用xcconfig文件進行體系結構條件構建設置。它看起來不可能通過GUI。創建一個包含以下內容的生成配置文件:

EXPORTED_SYMBOLS_FILE[arch=i386]=$(SRCROOT)/SymbolsList32Bit 
EXPORTED_SYMBOLS_FILE[arch=x86_64]=$(SRCROOT)/SymbolsList64Bit 

,然後在項目設置,設置文件是項目的生成配置,你應該是好去。 (顯然你必須讓路徑指向你的文件,但希望你能明白。)

它爲我工作。 (FWIW你也可以實現條件的SDK的名稱,如MY_SETTING [SDK =的iPhoneOS *] = FOO,MY_SETTING [SDK = MAC] = BAR等)

希望幫助!