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 位类和实例变量访问控制”

而且,当然,如果我将 _OBJC_IVAR_$_PluginBase.fConn 添加到导出文件中,一切正常……但仅适用于 64 位版本,32 位版本不知道此类事情:“未定义符号:”_OBJC_IVAR_ $_PluginBase.fConn",引用自:-exported_symbol[s_list] 命令行选项"

唯一的解决方案似乎是另一种解决方法:拥有两个导出文件。但是......我不能对 EXPORTED_SYMBOLS_FILE 设置使用“添加构建设置条件”:-S。

任何想法(除了使用公共访问器方法)?

4

1 回答 1

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 等)

希望有帮助!

于 2011-12-23T20:10:38.687 回答