CMake编译Catalyst平台Objective-C代码出现两类编译错误如何解决?
错误1:'UIKit/UIKit.h' file not found
- 根因:低于13.6的macabi目标版本存在SDK路径搜索缺陷,clang默认不会自动定位Catalyst专用的UIKit框架路径
- 解决方案:
- 优先选择13.6版本的target,这个版本的路径匹配逻辑最稳定
- 如果必须使用其他版本,需要手动添加两个编译参数:
-isysroot $(xcrun --sdk macosx --show-sdk-path) -iframework $(xcrun --sdk macosx --show-sdk-path)/System/iOSSupport/System/Library/Frameworks
错误2:target Objective-C runtime differs in PCH file vs. current file
- 根因:即使你没有手动创建PCH文件,CMake默认会为OC项目生成自动预编译头缓存,之前用其他版本target编译产生的缓存没有被完全清理,和新的13.6版本target的runtime配置冲突
- 解决方案:
- 完全删除CMake生成的build目录所有内容,不要只清Xcode的Build Folder,CMake的中间缓存存储在build目录下,Xcode的清理操作不会触及
- 重新执行CMake生成命令时,添加参数关闭预编译头自动生成:
cmake -DCMAKE_DISABLE_PRECOMPILE_HEADERS=ON 其余你原本的CMake参数 - 确认所有依赖的第三方库、子模块的编译target都统一为
x86_64-apple-ios13.6-macabi,不要出现不同版本混用的情况 - 可选验证:直接用clang命令测试单文件编译是否正常,排除SDK本身的问题:
clang -target x86_64-apple-ios13.6-macabi -isysroot $(xcrun --sdk macosx --show-sdk-path) -fobjc-arc your_test_file.m -o test.o
内容的提问来源于stack exchange,提问作者Top-Master
相关产品推荐
相关产品推荐

