问题现象如标题所示。
排查过程
我不是编译的arm64架构的动态库吗?怎么会爆出 i386 关键字?
是不是我交叉编译的ffmpeg库有问题?
使用readelf -h查看,未发现什么异常。
说明我们编译的库确实没问题。
原因
其实很简单,就是因为我没在gradle 中指定 abiFilters,编译到x86架构的时候就报错了。
解决
仅编译arm64架构的动态库。
在build.gradle.kts(我使用的kotlin版本的gradle脚本)中
defaultConfig {
...
ndk {
abiFilters.addAll(arrayOf("arm64-v8a"/*, "armeabi-v7a", "x86", "x86_64"*/))
}
}
如果你的build.gradle 使用的是java语言:
defaultConfig {
...
ndk {
abiFilters "arm64-v8a"/*, "armeabi-v7a", "x86", "x86_64"*/
}
}
我这里注释掉了其他架构,只保留arm64, 因为我只编译了一个arm64架构。