获取源码
前往官方地址下载源码,解压并打开工程。这里有我已经处理好的工程
创建调试 Target
创建一个 command line target
命名为 objc-debug
添加依赖
将静态库工程 objc
添加为 objc-debug
的 Target Dependencies
,在 Link Binary With Libraries
中添加 libobjc.A.dylib
解决编译错误
The i386 architecture is deprecated
将objc-debug
、objc
和 objc-trampolines
中的 Build Settings
选项 Architectures
中的值切换为 Standard Architectures(64-bit Intel)
'sys/reason.h' file not found
在工程目录中创建 Common
文件夹,在工程的 Header Serach Paths
中添加搜索路径 $(SRCROOT)/Common
获取头文件
使用 Google 搜索reason.h site:opensource.apple.com
,百度不行。由于reason.h
在sys
目录下,所以在Common
目录中创建sys
目录,并将reason.h
放入sys
目录中,重新编译。
以同样的方式解决下列问题:
- 'mach-o/dyld_priv.h' file not found
- 'os/lock_private.h' file not found
- 'os/base_private.h' file not found
- 'pthread/tsd_private.h' file not found
- 'System/machine/cpu_capabilities.h' file not found
- 'os/tsd.h' file not found
- 'pthread/spinlock_private.h' file not found
- 'System/pthread_machdep.h' file not found
- 'objc-shared-cache.h' file not found
- '_simple.h' file not found
- 'Block_private.h' file not found
'CrashReporterClient.h' file not found
修改CrashReporterClient.h
添加 #define LIBC_NO_LIBCRASHREPORTERCLIENT
Can't open order file: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/AppleInternal/OrderFiles/libobjc.order
在Order File
中添加$(SRCROOT)/libobjc.order
Library not found for -lCrashReporterClient
在Other Linker Flags
中删除-lCrashReporterClient
SDK "macosx.internal" cannot be located.
unable to find utility "clang++", not a developer tool or in PATH
将Target objc
的Build Phases->Run Script(markgc)
里的内容macosx.internal
改为macosx
no such public header file: '/tmp/objc.dst/usr/include/objc/ObjectiveC.apinotes'
把Text-Based InstallAPI Verification Model
里的值改为Errors Only
清空 Other Text-Based InstallAPI Flags
中的值
编译成功
处理完以上错误后,编译即可成功。可以在 objc-debug
的 main.m
中添加代码,进行调试了。
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSObject *obj = [NSObject new];
NSLog(@"obj:%@", obj);
}
return 0;
}