Xcode从14.0升级到16.3后SwiftUI项目启动失败求助
兄弟,我之前升级Xcode的时候也踩过类似的坑!先帮你理清楚问题来龙去脉,再给你几个可行的解决办法:
问题背景
- 项目构建成功,但App启动直接崩溃
- iOS部署目标设置为15.0,测试设备运行iOS17.0
- C++语言标准配置的是
GNU++20
报错信息
dyld[1669]: Symbol not found: ___cxa_current_primary_exception
Referenced from: <9DF2FEE8-CDED-3A0C-8FFE-8C9FF289257D> /private/var/containers/Bundle/Application/434A154D-E917-4263-901D-B6E06E28DEF1/myapp.app/myapp.debug.dylib
Expected in:/usr/lib/libc++
问题原因
这个报错的核心是GNU20标准的C库符号和Xcode16.3适配iOS17的libc++动态库不兼容。___cxa_current_primary_exception是C异常处理相关的符号,GNU扩展版的标准库和苹果原生的libc在这个符号的实现上有差异,导致动态链接时找不到对应符号。
解决办法
优先尝试:切换到苹果原生C++标准
打开项目设置,找到对应Target的Build Settings,搜索「C++ Language Dialect」,把选项从GNU++20改成C++20(不带GNU前缀的版本)。苹果原生的C标准和系统libc兼容性更好,大概率能直接解决问题。备选方案:升级部署目标版本
如果你的项目必须依赖GNU20的特性,可以尝试把iOS Deployment Target提升到16.0及以上。高版本iOS系统的libc库已经包含了更多GNU兼容的符号,可能能匹配上。辅助操作:清理构建缓存
先按Cmd+Shift+K清理Xcode的构建文件夹,再重启Xcode重新构建项目。有时候升级Xcode后残留的旧缓存会导致奇怪的链接问题,清理后往往能解决。
备注:内容来源于stack exchange,提问作者jifei

