关闭Xcode中Address Sanitizer后出现编译错误求助
问题原因与解决方法
这些未定义符号属于Undefined Behavior Sanitizer(UBSan,未定义行为检查器)。当你开启Address Sanitizer(ASan)时,Xcode会自动同时启用并链接UBSan的依赖库;但关闭ASan后,若项目中仍保留了UBSan的编译配置,编译器会生成依赖UBSan的代码,却没有自动链接对应的库,最终导致链接阶段出现符号未定义错误。
解决步骤:
检查并关闭UBSan编译选项
打开Xcode,选中项目→对应Target→Build Settings:- 搜索
Undefined Behavior Sanitizer,确保该选项设置为NO - 若直接搜索编译标志
OTHER_CFLAGS或OTHER_CXXFLAGS,删除其中的-fsanitize=undefined相关参数
- 搜索
排查第三方依赖或脚本的残留配置
- 检查Podfile、自定义build脚本等,确认是否有强制添加
-fsanitize=undefined的代码,移除相关配置 - 若使用CocoaPods,可执行
pod deintegrate后再运行pod install,确保依赖没有残留的Sanitizer设置
- 检查Podfile、自定义build脚本等,确认是否有强制添加
验证Build Configuration的一致性
确认当前使用的Build Configuration(如Debug/Release)下,所有Sanitizer相关选项都已关闭,避免不同配置间的设置冲突彻底清理编译缓存
执行Cmd+Shift+K清理Xcode编译缓存,同时删除Derived Data目录,之后重启Xcode重新编译项目
内容的提问来源于stack exchange,提问作者bjorn.lau
相关产品推荐
相关产品推荐

