android静态库错误的ELF号 [英] android static library bad ELF number

查看:103
本文介绍了android静态库错误的ELF号的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经使用Android ndk构建了一个静态库。

I have build a static library with the Android ndk.

我现在尝试在另一个Android项目中使用该库

I now try to use this library in another Android project

//in mainActivity
static
{
    System.loadLibrary("MILlib");
}

构建测试项目时出现以下错误

I got the following error when building the test project


02 17:07:24.890 2785-2785 / com.MIL.testlib E / AndroidRuntime:致命例外:main
进程:com.MIL.testlib ,PID:2785
java.lang.UnsatisfiedLinkError:dlopen失败: / data / app / com.MIL.testlib-1 / lib / arm / libMILlib.so在Java中的ELF魔术
不好。 lang.Runtime.loadLibrary(Runtime.java:371)
at java.lang.System.loadLibrary(System.java:989)
at com.MIL.testlib.MainActivity。(MainActivity.java:112 )
在java.lang.reflect.Constructor.newIn立场(本机方法)java.lang.Class.newInstance(Class.java:1650)
android.app.Instrumentation.newActivity(Instrumentation.java:1079)
在android。 app.ActivityThread.performLaunchActivity(ActivityThread.java:2640)
在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2873)
在android.app.ActivityThread.access $ 900(ActivityThread.java:181 )
在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1482)
在android.os.Handler.dispatchMessage(Handler.jav a:102)android.os.Looper.loop(Looper.java:145)的
android.app.ActivityThread.main(ActivityThread.java:6145)的
的java.lang .reflect.Method.invoke(本机方法)java.lang.reflect.Method.invoke(Method.java:372)
在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run( ZygoteInit.java:1399)
在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)

02 17:07:24.890 2785-2785/com.MIL.testlib E/AndroidRuntime: FATAL EXCEPTION: main Process: com.MIL.testlib, PID: 2785 java.lang.UnsatisfiedLinkError: dlopen failed: "/data/app/com.MIL.testlib-1/lib/arm/libMILlib.so" has bad ELF magic at java.lang.Runtime.loadLibrary(Runtime.java:371) at java.lang.System.loadLibrary(System.java:989) at com.MIL.testlib.MainActivity.(MainActivity.java:112) at java.lang.reflect.Constructor.newInstance(Native Method) at java.lang.Class.newInstance(Class.java:1650) at android.app.Instrumentation.newActivity(Instrumentation.java:1079) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2640) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2873) at android.app.ActivityThread.access$900(ActivityThread.java:181) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1482) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:145) at android.app.ActivityThread.main(ActivityThread.java:6145) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)

什么是错误的ELF幻数以及如何解决?

What is a bad ELF magic number and how to solve it ?

推荐答案

A .so 对象是共享对象文件。这是本机代码,而不是Java库,因此称为 ELF ,因为它采用可扩展链接格式。

A .so object is a shared object file. This is native code as opposed to a Java library and it is called an ELF because it is in Extensible Linking Format.

魔术是指 ELF 文件的前64位。这指定了一些标头信息,包括为其构建的系统的体系结构。

The "magic" refers to the first 64 bits of the ELF file. This specifies some header information, including the architecture of the system it was built for.

Android手机支持三种体系结构:ARM,Intel和MIPS。仿真器支持它们运行的​​硬件,通常是Intel。鉴于您的 .so 在目录路径中具有 arm,我怀疑您的 .so 是ARM .so ,而您正在尝试在Intel或MIPS上运行它。

Android phones support three architectures: ARM, Intel, and MIPS. Emulators support the hardware they are running on, usually Intel. Given that your .so has 'arm' in the directory path, I suspect that your .so is an ARM .so and you are trying to run this on either Intel or MIPS.

这篇关于android静态库错误的ELF号的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆