我有一个基于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位类和实例变量访问控制”部分
当然,如果我将_OBJC_IVAR _ $ _ PluginBase.fConn添加到导出文件中,一切都有效...但仅针对64位版本,32位版本不知道这些事情: “ 未定义的符号: “_OBJC_IVAR _ $ _ PluginBase.fConn”,引自: -exported_symbol [s_list]命令行选项 “
唯一的解决方案似乎是另一种解决方法:拥有两个导出文件。但是......我不能对EXPORTED_SYMBOLS_FILE设置使用“添加构建设置条件”:-S。
任何想法(除了使用公共访问方法)?
答案 0 :(得分:2)
您可以使用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等)
希望有所帮助!