我正试图让 objc4-532.2 在小牛队工作。
(首先,我尝试编译最新版本的objc4(objc4-551.1)。 由于 os / lock_private.h 缺失( objc-os.h ),因此失败。也许有人知道如何解决这个问题?)
返回主题:
要成功构建 objc4-532.2 ,我需要链接到基于的框架
在OS X 10.8上。
所以我将Xcode项目配置为使用OS X 10.8 SDK来实现 Base SDK 和 OS X部署目标 。
这很有效,我可以编译和链接一个简单的基于控制台的C程序(Xcode模板)。
但是,当我尝试将此程序与Foundation链接并进行调试时,它会因以下错误而失败:
dyld:未找到符号:_objc_debug_taggedpointer_mask参考自: /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation 期望: /Users/manu/Library/Developer/Xcode/DerivedData/objc-dtrsexfveobodwdnwlpknyyiekpe/Build/Products/Debug/libobjc.A.dylib 在 /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation
符号 _objc_debug_taggedpointer_mask 首先在 objc4-551.1 (最新运行时)中引入,所有10.9框架需求访问此符号(至少在调试模式下)。
示例:
$ cd /System/Library/Frameworks/Foundation.framework/Versions/C
$ grep objc_debug_taggedpointer_mask Foundation
Binary file Foundation matches
基于10.8的框架不包含这样的符号。
由于我的项目配置为使用10.8 SDK,因此不应出现此错误?!
那么,缺少什么呢?
谢谢!
答案 0 :(得分:1)
我解决了这个问题:在mac os x 10.9之后将objc_debug_taggedpointer_mask的符号导入运行时,因此您需要将新标记添加到532.2的代码中,以使其与os x 10.9&#39兼容基础和其他框架。
这是我的工作目录:
答案 1 :(得分:0)
(首先,我尝试编译最新版本的objc4 (objc4-551.1)。由于缺少os / lock_private.h,因此失败 (objc-os.h)。也许有人知道如何解决这个问题?)
我能找到的最佳解决方案是手动将头文件拼凑在一起,如下所述:
http://www.mulle-kybernetik.com/weblog/2011/how_to_build_libobjc_for_os_x.html
我发现的最接近os/lock_private.h
的是来自libpthread项目的private/tsd_private.h
:
https://opensource.apple.com/source/libpthread/libpthread-105.40.1/private/tsd_private.h
修改强>
我也发现了这个:
https://github.com/samdmarshall/OSXPrivateSDK