java - 尝试加载显然存在的库时出现 UnsatisfiedLinkError

标签 java android c android-ndk java-native-interface

我正在使用预构建的库(libsox.so 等),并且正在为 JNI 接口(interface)使用一个小的测试文件 (sox-test-jni.so)。我正在尝试通过 System.loadLibrary 加载“sox”和“sox-test-jni”,但在运行时遇到了 UnsatisfiedLinkError。

我之前使用 NDK 构建了 libsox.so 等。

当我运行 ndk-build 时,一切似乎都很好,所有需要的文件都放入 libs/armeabi-v7a/

在手机上运行我的 Java 应用程序时,错误是:

Cannot load library: link_image[1963]:  1413 could not load needed library 'liblpc10.so' for 'libsox.so' (load_library[1105]: Library 'liblpc10.so' not found)

很明显它找到了 libsox.so 就好了,但是找不到 liblpc10.so,它就在它旁边。

这些是我的 APK 文件中的库 - 在 libs/armeabi-v71/

libffmpeg.so
libFLAC.so
libfmemopen.so
libgsm.so
liblpc10.so
libmad.so
libmp3lame.so
libogg.so
libplayer.so
libpng.so
libsmr.so
libsmrx.so
libsndfile.so
libsox.so
libsox-test-jni.so
libvorbis.so
libvorbisenc.so
libvorbisfile.so
libwavpack.so

这是我用于 JNI 的 Android.mk。

http://pastebin.com/raw.php?i=dcSijYSv

这是我的 Java:

package roman10.ffmpegTest;

import android.app.ListActivity;
import android.widget.AbsListView;
import android.widget.ListView;

public class VideoBrowser extends ListActivity implements ListView.OnScrollListener {

  //load the native library
  static {
      System.loadLibrary("sox");
      System.loadLibrary("sox-test-jni");
    }

    @Override
    public void onScroll(AbsListView arg0, int arg1, int arg2, int arg3) {
    }

    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {
    } 
}

最佳答案

看来我需要明确告诉 Java 加载任何依赖项。它不会自己弄清楚它们,即使它知道它想要“liblpc10.so”它也不会自动加载它。

  System.loadLibrary("ffmpeg");
  System.loadLibrary("ogg");
  System.loadLibrary("lpc10");
  System.loadLibrary("gsm");
  System.loadLibrary("vorbis");
  System.loadLibrary("vorbisenc");
  System.loadLibrary("vorbisfile");
  System.loadLibrary("FLAC");
  System.loadLibrary("fmemopen");
  System.loadLibrary("mad");
  System.loadLibrary("mp3lame");
  System.loadLibrary("smr");
  System.loadLibrary("png");
  System.loadLibrary("smrx");
  System.loadLibrary("sndfile");
  System.loadLibrary("wavpack");      
  System.loadLibrary("sox");
  System.loadLibrary("sox-test-jni");

关于java - 尝试加载显然存在的库时出现 UnsatisfiedLinkError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8568777/

相关文章:

java - 意外的子元素 highLevelCategoryReq,事务搜索

java - 无法从editText Android获取文本

android - 强制 Visual Studio 2017 使用特定的 Android 模拟器

java - Android ImageView 链接到网站

java - 在 JDBC 中获取列名

c - linux下的C初学者。写入功能无法正常工作

c - 如何修复 - 使用 getchar() 和 do-while 的意外输出

c - 将可变大小缓冲区从 SGX enclave 传递到外部

java - 是否可以为 Tomcat 使用相同的代码库?

android - ClassNotFoundException : android. hardware.camera2.CameraAccessException 与 OpenCV 3.1.0