你好,我得到了这个 Android 应用程序项目,在这部分代码中:
init {
try {
System.loadLibrary("c++_shared")
} catch (e: Exception) {
Log.e(TAG, "Could not load library due to: ${Log.getStackTraceString(e)}")
//throw e
}
}
我得到:
java.lang.UnsatisfiedLinkError: dlopen failed: library "libc++_shared.so" not found
at java.lang.Runtime.loadLibrary0(Runtime.java:1077)
at java.lang.Runtime.loadLibrary0(Runtime.java:998)
at java.lang.System.loadLibrary(System.java:1661)
at com.assembleinc.kidstunes.media.MediaPlaybackService.<clinit>(MediaPlaybackService.kt:237)
at com.assembleinc.kidstunes.media.MediaBrowserController.onStart(MediaBrowserController.kt:56)
at com.assembleinc.kidstunes.ui.main.MainActivity.onStart(MainActivity.kt:72)
我得到了 CMake 版本 3.18.1-g262b901 在我的 gradle 中我得到了:
compileSdkVersion 33
defaultConfig {
applicationId "com.test.music"
minSdkVersion 23
targetSdkVersion 33
versionCode 1
versionName "1.0"
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
externalNativeBuild {
cmake {
cppFlags ""
arguments "-DANDROID_STL=c++_shared"
}
}
}
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
ndkVersion '21.3.6528147'
无论我在Android Studio中点击多少次:
有人知道为什么会发生这种情况吗?
提前感谢大家的帮助。
@Michael 在原始问题下方的评论回答了所提出的问题,但我只是想确保那些偶然发现这个问题的人可以轻松找到答案。
externalNativeBuild {
cmake {
cppFlags ""
arguments "-DANDROID_STL=c++_shared"
}
}
问题出在build.gradle文件中的以下代码行
参数“-DANDROID_STL=c++_shared”
这不是必需的,因为无论如何,本机代码所需的任何库都将包含在本机工具链构建的共享库中。
您可能遇到的另一个问题是本机代码所需的其他库以及用于构建它们的推荐 NDK 版本。例如,就我而言,tensorflow 团队推荐 NDK 21b,如果您遇到同样的问题,您也许可以通过降级到早期版本的 NDK 来解决问题。由于 NDK 版本不匹配(之前我尝试使用 NDK 26b),我遇到了这个问题,并且得到了 OP 询问的错误,当我返回 NDK 21b 时,错误消失了。