Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android java.lang.UnsatifiedLinkError:dlopen失败:libavcodec-57。因此有意外的e_计算机:40_Android_Arm_Shared Libraries - Fatal编程技术网

Android java.lang.UnsatifiedLinkError:dlopen失败:libavcodec-57。因此有意外的e_计算机:40

Android java.lang.UnsatifiedLinkError:dlopen失败:libavcodec-57。因此有意外的e_计算机:40,android,arm,shared-libraries,Android,Arm,Shared Libraries,我正在尝试在Android应用程序中使用FFmpeg 3.1.3。 “libavcodec-57.so”加载到主活动中,如下所示: static { LogUtil.e("DEVICE ARCH", System.getProperty("os.arch")); System.loadLibrary("avutil-55"); System.loadLibrary("avcodec-57"); } logcat给了我:(时间不重要) E/设备架构:armv7l D/d

我正在尝试在Android应用程序中使用FFmpeg 3.1.3。 “libavcodec-57.so”加载到主活动中,如下所示:

static {
    LogUtil.e("DEVICE ARCH", System.getProperty("os.arch"));

    System.loadLibrary("avutil-55");
    System.loadLibrary("avcodec-57");
}
logcat给了我:(时间不重要)

E/设备架构:armv7l
D/dalvikvm:尝试加载lib/data/app lib/-1/libavutil-55.so 0x4d11fe10
D/houdini:[5955]正在加载库(版本:4.1.1a_y.45536发行版)。。。成功地
D/dalvikvm:添加了共享lib/data/app lib/-1/libavutil-55.so 0x4d11fe10
D/dalvikvm:在/data/app lib/-1/libavutil-55.so 0x4d11fe10中未找到JNI_OnLoad,正在跳过初始化
D/dalvikvm:正在尝试加载lib/data/app lib/-1/libavcodec-57.so 0x4d11fe10
D/houdini:[5955]不支持的功能(ID:0x10600ccf)。
D/houdini:[5955]打开本机库/data/app lib/-1/libavcodec-57。因此失败。
E/dalvikvm:Houdini dlopen(“/data/app lib/-1/libavcodec-57.so”)失败:无法加载ARM库
W/dalvikvm:异常Ljava/lang/unsatifiedLinkError;初始化Lapp/Activity/MainActivity时引发;
W/dalvikvm:newInstance调用中的类初始化失败(Lapp/Activity/MainActivity;)
D/AndroidRuntime:关闭虚拟机
W/dalvikvm:threadid=1:线程以未捕获异常退出(组=0x4c810160)
W/TDLog:main线程中的UncaughtException
java.lang.UnsatifiedLinkError:dlopen失败:“/data/app lib/-1/libavcodec-57.so”具有意外的e_计算机:40
位于java.lang.Runtime.loadLibrary(Runtime.java:364)
位于java.lang.System.loadLibrary(System.java:526)
MainActivity.MainActivity.(MainActivity.java:128)
位于java.lang.Class.newInstanceImpl(本机方法)
位于java.lang.Class.newInstance(Class.java:1208)
位于android.app.Instrumentation.newActivity(Instrumentation.java:1061)
位于android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2141)
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2273)
在android.app.ActivityThread.access$800(ActivityThread.java:138)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1236)
位于android.os.Handler.dispatchMessage(Handler.java:102)
位于android.os.Looper.loop(Looper.java:149)
位于android.app.ActivityThread.main(ActivityThread.java:5045)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:515)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:610)
在dalvik.system.NativeStart.main(本机方法)
它说设备的拱门是手臂
libavcodec-57.so
加载失败,并且
e_机器:40
指示预期的arch也是ARM(请参阅)


此外,
libavutil-55.so
libavcodec-57.so
都位于同一个目录中。

解决方案是通过
libavcodec-57加载所需的所有库。因此,在加载之前

执行
readelf-d libavcodec-57。因此需要的| grep
将获得它需要的库:

0x00000001 (NEEDED)                     Shared library: [libswresample-2.so]
0x00000001 (NEEDED)                     Shared library: [libavutil-55.so]
0x00000001 (NEEDED)                     Shared library: [libx264-148.so]
0x00000001 (NEEDED)                     Shared library: [libfaac.so]
0x00000001 (NEEDED)                     Shared library: [libm.so]
0x00000001 (NEEDED)                     Shared library: [libz.so]
0x00000001 (NEEDED)                     Shared library: [libc.so]
除了内置库
libm
libz
libc
,所有需要的库都应该在libavcodec-57之前加载。因此Java代码的变化如下:

static {
    System.loadLibrary("faac");
    System.loadLibrary("x264-148");
    System.loadLibrary("avutil-55");
    System.loadLibrary("swresample-2"); // need x264 and avutil
    System.loadLibrary("avcodec-57"); // need all of the above
}

尝试解包FFmpeg apk。也许它不在这个特定手机的正确文件夹中?
static {
    System.loadLibrary("faac");
    System.loadLibrary("x264-148");
    System.loadLibrary("avutil-55");
    System.loadLibrary("swresample-2"); // need x264 and avutil
    System.loadLibrary("avcodec-57"); // need all of the above
}