cmake 为什么我得到java.lang.UnsatisfiedLinkError:dlopen failed:library“libc ++_shared.so”not found in my Android project?

wfveoks0  于 2023-11-19  发布在  Java
关注(0)|答案(1)|浏览(239)

你好,我得到了这个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-g262 b 901在我的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中点击多少次:
1.刷新的C++链接项目
1.清洁

  1. Build Everything看起来都很好,但是当运行时,我得到了前面提到的错误。
    有人知道为什么会这样吗?
    提前感谢大家的帮助。
hujrc8aj

hujrc8aj1#

@Michael的评论就在原来的问题下面回答了所问的问题,但我只是想确保那些在这个问题上绊倒的人可以很容易地找到答案。

externalNativeBuild {
    cmake {
        cppFlags ""
        arguments "-DANDROID_STL=c++_shared"
    }
}

字符串
问题是build.gradle文件中的以下代码行

参数“-DANDROID_STL=c++_shared”

这不是必需的,因为本机代码所需的任何库都将包含在本机工具链构建的共享库中。
你可能会遇到的另一个问题是你的原生代码所需的其他库以及构建它们所推荐的NDK构建。例如,在我的案例中,tensorflow团队推荐NDK 21 b,如果你面临同样的问题,你也许可以通过降级到NDK的早期版本来解决这个问题。我遇到这个问题是由于NDK构建中的不匹配(早些时候我尝试使用NDK 26 b)的一些库,并得到了OP询问的错误,当我回到NDK 21 b时,错误消失了。

相关问题