主要原因是编译器版本不匹配或者ABI不匹配。需要确保编译器版本和ABI都能正确匹配。
Log.d("ABI", Build.CPU_ABI + " " + Build.CPU_ABI2);
Log.d("GCC", Build.VERSION.SDK_INT + " " + Build.VERSION.PREVIEW_SDK_INT + " " + Build.CPU_ABI);
android {
...
defaultConfig {
...
ndk {
abiFilters "armeabi-v7a", "x86", "arm64-v8a", "x86_64"
// 设置使用的编译器版本,默认为clang
ldLibs "c++_shared"
}
...
}
...
}
// 引入新的编译器版本
repositories {
flatDir {
dirs 'libs'
}
...
}
dependencies {
implementation files('libs/libc++_shared.so')
...
}
通过以上的步骤,可以解决dlopen失败的问题。