Universal macOS应用编译失败:sqlite3 dylib仅支持ARM架构
针对Universal macOS应用SQLite3问题的解决方案
关于架构缺失的链接错误
- 弱链接不是可行方案:弱链接仅能避免运行时符号缺失崩溃,但Xcode归档阶段的通用二进制完整性检查依然会失败,且Intel设备运行时仍可能因找不到对应架构的SQLite3符号报错。
- 推荐方案:自行编译或下载多架构版本的SQLite3库并嵌入项目:
- 编译多架构库:获取SQLite3源码后,用Clang指定双架构编译:
此命令直接生成支持arm64和x86_64的动态库;若需静态库,可先执行clang -arch arm64 -arch x86_64 -mmacosx-version-min=12.0 -dynamiclib sqlite3.c -o libsqlite3.dylib -lpthread -ldlclang -arch arm64 -arch x86_64 -mmacosx-version-min=12.0 -c sqlite3.c生成目标文件,再用ar rcs libsqlite3.a sqlite3.o打包。 - 嵌入项目:将编译好的库添加到Xcode项目,在「Build Phases」的「Link Binary With Libraries」中引入,并确保「Embed & Sign」设置正确。
- 编译多架构库:获取SQLite3源码后,用Clang指定双架构编译:
关于版本高于部署目标的警告
- 该警告源于系统自带的SQLite3是基于macOS 13编译的,而你的应用部署目标为12。如果采用上述嵌入自定义库的方案,编译时加上
-mmacosx-version-min=12.0参数,就能让库适配macOS 12,警告会自动消失。 - 若坚持使用系统库,只能将部署目标提升至macOS 13,但这会放弃对旧系统的支持,不推荐。
内容的提问来源于stack exchange,提问作者tridiak
相关产品推荐
相关产品推荐

