2016-06-02 12 views
0

Ich habe eine statische Bibliothek mit dem Android ndk bauen.Android statische Bibliothek schlechte ELF-Nummer

Ich versuche nun diese Bibliothek in einem anderen Android-Projekt

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

ich folgende Fehlermeldung bekam zu verwenden, wenn das Projekt Test Aufbau

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)

Was für eine schlechte ELF magische Zahl ist und wie zu lösen es?

Antwort

0

Ein .so Objekt ist eine gemeinsame Objektdatei. Dies ist systemeigener Code im Gegensatz zu einer Java-Bibliothek und wird ELF genannt, weil er im Extensible Linking Format vorliegt.

Die "Magie" bezieht sich auf die ersten 64 Bits der Datei ELF. Dies gibt einige Header-Informationen an, einschließlich der Architektur des Systems, für das es erstellt wurde.

Android-Telefone unterstützen drei Architekturen: ARM, Intel und MIPS. Emulatoren unterstützen die Hardware, auf der sie laufen, normalerweise Intel. Angesichts der Tatsache, dass Ihre .so 'Arm' im Verzeichnispfad hat, vermute ich, dass Ihre .so ist ein ARM .so und Sie versuchen, dies auf Intel oder MIPS auszuführen.