编译arm64架构C++静态库嵌入iOS Xcode项目提示为macOS构建问题咨询
编译iOS可用静态库的缺失配置说明
你当前使用的g++ -shared -o ./libCrossPiOS_TestMulti.iOS.a ./alpha.cpp -arch arm64存在多个配置错误,具体缺失的配置和问题如下:
- 错误使用动态库编译参数:
-shared是生成动态库的专用参数,静态库(.a)本质是多个目标文件的打包合集,不需要经过链接步骤,你当前命令生成的实际是MacOS平台的arm64动态库,仅后缀被强制修改为.a,格式不符合静态库要求。 - 缺失目标平台指定:MacOS默认的g++(实际为clang别名)默认编译目标为当前运行的MacOS系统,仅指定
-arch arm64只会生成MacOS arm64架构的二进制,Apple不同操作系统的二进制带有独立的平台标识,哪怕架构一致也无法跨系统使用,因此Xcode会识别出库的所属平台为MacOS不兼容iOS。 - 缺失iOS SDK关联:编译时没有指定iOS SDK作为根目录,默认使用MacOS的头文件和依赖库,即便修改目标平台也会出现编译错误或者依赖不兼容问题。
正确编译步骤
首先获取本地iOS SDK路径,执行命令:
xcrun --sdk iphoneos --show-sdk-path
输出的路径即为当前Xcode绑定的iOS真机SDK路径。编译源文件为iOS arm64架构的目标文件,命令示例(最低兼容iOS版本可自行修改):
g++ -c alpha.cpp -arch arm64 -isysroot $(xcrun --sdk iphoneos --show-sdk-path) -target arm64-apple-ios12.0 -o alpha.o
参数说明:
-c:仅执行编译步骤,不进行链接,输出.o目标文件-isysroot:指定编译时的根目录为iOS SDK,所有头文件和系统依赖都会从该路径下查找-target:指定编译目标为iOS平台的arm64架构,最低支持iOS 12.0版本
- 将目标文件打包为静态库,执行ar命令:
ar rcs libCrossPiOS_TestMulti.iOS.a alpha.o
编译完成后可执行otool -l libCrossPiOS_TestMulti.iOS.a | grep LC_BUILD_VERSION验证库的平台属性,确认platform字段为ios即可正常链接到iOS项目中。
内容的提问来源于stack exchange,提问作者Valgrind1691
相关产品推荐
相关产品推荐

