gpt4 book ai didi

objective-c - 导出符号文件 : Objective C derived class members, 64 位

转载 作者:搜寻专家 更新时间:2023-10-30 19:46:43 25 4
gpt4 key购买 nike

我有一个基于 Cocoa 的通用动态库,其中还包含更多静态库,我想从中导出功能。看来我不能不使用导出符号文件就不能做最新的,这对我来说很好......不知何故。我没有在任何地方使用“默认隐藏符号”设置(GCC_SYMBOLS_PRIVATE_EXTERN,-fvisibility=hidden)。 当我试图从动态库中导出基类时,问题出现了,更具体地说,当我试图在库中未包含的派生类中使用其成员时,更具体地说,是在 64 位构建中:“ undefined symbol : “_OBJC_IVAR_$_PluginBase.fConn”“ 我知道 64 位更改:http://developer.apple.com/library/mac/#releasenotes/Cocoa/RN-ObjectiveC/_index.html ,“64 位类和实例变量访问控制”部分

当然,如果我将 _OBJC_IVAR_$_PluginBase.fConn 添加到导出文件中,一切都会正常...但仅适用于 64 位版本,32 位版本不知道这些事情:“ undefined symbol : “_OBJC_IVAR_$_PluginBase.fConn”,引用自: -exported_symbol[s_list] 命令行选项"

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

有什么想法(除了使用公共(public)访问器方法之外)?

最佳答案

您可以使用 xcconfig 文件进行架构条件build设置。看起来通过 GUI 是不可能的。创建包含以下内容的构建配置文件:

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

然后在项目设置中,将该文件设置为项目的构建配置,您应该可以开始了。 (显然,您必须使路径指向您的文件,但希望您能理解。)

它对我有用。 (顺便说一下,您还可以根据 SDK 名称进行条件化,例如 MY_SETTING[sdk=iphoneos*]=FOO、MY_SETTING[sdk=mac]=BAR 等)

希望对您有所帮助!

关于objective-c - 导出符号文件 : Objective C derived class members, 64 位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8541195/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com