问题:
我正在Eclipse中构建Android应用程序,它使用共享库libgstreamer-0.10.so (为Android-8平台编译的GStreamer-android NDK Bundle库).我libs/armeabi在项目根文件夹中创建了新文件夹并将其放在那里.此外,我已将所有其他随附的库(其中158个)放在同一个文件夹中.如果我把它放在我的主要活动代码中:
static{
System.loadLibrary("gstreamer-0.10");
}
Run Code Online (Sandbox Code Playgroud)
在Android-8模拟器上构建/安装/运行我的应用程序,它会抛出此错误:
06-15 21:54:00.835: E/AndroidRuntime(402): Caused by: java.lang.UnsatisfiedLinkError: Cannot load library: link_image[1962]: 33 could not load needed library 'libglib-2.0.so' for 'libgstreamer-0.10.so' (load_library[1104]: Library 'libglib-2.0.so' not found)
Run Code Online (Sandbox Code Playgroud)
现在,和libglib-2.0.so它在同一个文件夹中libgstreamer-0.10.so,为什么没有加载?我得到链接器试图加载它/system/lib,libglib-2.0.so只是不存在,但为什么不从它的位置加载它libgstreamer-0.10.so?
所以我libgstreamer-0.10.so用这个命令去发现哪些lib 依赖:
arm-linux-androideabi-readelf -d libgstreamer-0.10.so
Run Code Online (Sandbox Code Playgroud)
结果:
Dynamic section at offset 0x118b64 contains 29 entries:
Tag Type Name/Value
0x00000001 (NEEDED) Shared library: [libglib-2.0.so]
0x00000001 (NEEDED) Shared library: [libgobject-2.0.so]
0x00000001 (NEEDED) Shared …Run Code Online (Sandbox Code Playgroud) 我已经交叉编译了适用于 Android(x86和arm)的 OpenSSL。我使用through将.so文件(分别:libcrypto.so和libssl.so)添加到生成的文件中。我已经检查过,文件已正确打包在生成的..apkjniLibsbuild.gradle.so.apk
现在,这些.so文件已正确命名:
$ objdump -p libssl.so | grep SONAME
SONAME libssl.so.1.1
$ objdump -p libcrypto.so | grep SONAME
SONAME libcrypto.so.1.1
Run Code Online (Sandbox Code Playgroud)
然而,当执行代码时,我收到以下错误:java.lang.UnsatisfiedLinkError: dlopen failed: library "libcrypto.so.1.1" not found。
我在标题中提到我正在使用 JNI,因为问题实际上是在创建 JNI 模块之一时出现的。
我的项目结构如下:
我有一个JNILibraryAndroid Studio项目,其目标是生成一个Android库(.aar文件)。它有 2 个.java类:AgentWrapper.java、 和ClientWrapper.java,它们都公开本机方法。该CMakeLists.txt文件编译 C (JNI) 代码,生成的.so文件 (libagent.so和libclient.so) …