iOS添加libtorch_lite依赖遇链接架构不匹配错误求助
解决方案
1. 验证并重新编译Essentia,确保全目标文件适配iOS
lipo -info仅显示架构名称,但M1设备上macOS的arm64与iOS的arm64属于不同平台目标(分别对应arm64-apple-darwin和arm64-apple-ios)。先检查有问题的目标文件:
otool -hv libessentia.a(nnls.c.1.o)
如果输出中architecture字段后缀为darwin,说明该目标文件是为macOS编译的,需重新编译Essentia:
- 修改构建脚本,明确指定iOS SDK与目标平台,例如添加参数:
-sdk iphoneos -target arm64-apple-ios12.0 - 编译完成后再次用
otool检查所有目标文件,确保均为iOS平台架构。
2. 用-force_load替代-all_load,精准加载Torch库
-all_load会强制链接所有静态库的全部目标文件,这是触发问题的核心原因。Torch仅需自身静态库被强制加载,因此替换链接标记:
- 移除
-all_load,添加:
(替换为你实际的libtorch-lite静态库路径)-force_load /path/to/libtorch_lite/libtorchlite.a - 此操作既保证Torch的所有符号被正确链接,又不会加载Essentia中错误平台的目标文件。
3. 确认Torch Lite的iOS兼容性
- 若自行编译Torch Lite,需明确指定iOS目标:
BUILD_IOS=1 IOS_PLATFORM=OS IOS_ARCH=arm64 python setup.py build - 避免使用macOS版本的Torch Lite库,即便架构同为arm64,平台兼容性仍不匹配。
内容的提问来源于stack exchange,提问作者Syl Morrison
相关产品推荐
相关产品推荐

