的UnsatisfiedLinkError试图加载库,这显然是有当

我使用的是预建库(libsox.so等),我使用JNI接口(sox-test-jni.so)一个小的测试文件。 我试图通过加载的System.loadLibrary“SOX法案”和“SOX-测试JNI”,我在运行时得到一个的UnsatisfiedLinkError。

我以前建libsox.so等与NDK。

当我运行NDK的构建,一切似乎都很好,所有必需的文件放在进库/ 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文件库 - 库中/ 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

这里是我的Andr​​oid.mk的JNI东西。

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");

尝试这个:

static {
try{
System.loadLibrary("ffmpeg-prebuilt");// ffmpeg in some code as android.mk module name
System.loadLibrary("ffmpeg-test-jni");
}
catch (UnsatisfiedLinkError e) {
Log.e("Error..1", e.toString());
}
}

Android.mk是用于你的源代码,而不是预编译的.so的编译:

#AMR
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := amr
LOCAL_C_INCLUDES := amr/c
LOCAL_SRC_FILES := \
amr/c/sp_enc.cpp \
amr/c/interf_enc.cpp \
amr/c/interf_dec.cpp \
amr/c/sp_dec.cpp \
amr/amr.cpp
TARGET_ARCH_ABI := armeabi-v7a
include $(BUILD_SHARED_LIBRARY)

如果你只是做一个加载库在你这样的,而不是包括他们的编译过程中,你应该有一个更好的结果。 另外,也许你可以尝试重命名库? 我遇到了一个手机崩溃,因为我是加载一个名为库的问题“MSS”的时候,其实,有该名称已经在手机上图书馆。 (重命名我的图书馆了这个问题的关心。)

分类:java的 时间:2015-03-15 人气:0
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.962 (s). 10 q(s)