相关疑难解决方法(0)

加载依赖于其他共享库的共享库

问题:

我正在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)

linker android gstreamer android-ndk

14
推荐指数
1
解决办法
2万
查看次数

Android 的外部库和 JNI:dlopen 失败:未找到库“libcrypto.so.1.1”,即使 SONAME 设置正确

我已经交叉编译了适用于 Android(x86arm)的 OpenSSL。我使用through将.so文件(分别:libcrypto.solibssl.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.solibclient.so) …

android cross-compiling apk

5
推荐指数
1
解决办法
2092
查看次数

标签 统计

android ×2

android-ndk ×1

apk ×1

cross-compiling ×1

gstreamer ×1

linker ×1