在OS X 10.9上调试objc4(532.2)

时间:2014-05-05 10:00:58

标签: objective-c macos osx-mavericks objective-c-runtime

我正试图让 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,因此不应出现此错误?!
那么,缺少什么呢?

谢谢!

2 个答案:

答案 0 :(得分:1)

我解决了这个问题:在mac os x 10.9之后将objc_debug_taggedpointer_mask的符号导入运行时,因此您需要将新标记添加到532.2的代码中,以使其与os x 10.9&#39兼容基础和其他框架。

这是我的工作目录:

  

https://github.com/Jeswang/objc4-532.2

答案 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