簡體   English   中英

運行android本機代碼導致java.lang.UnsatisfiedLinkError

[英]Running android native code is causing java.lang.UnsatisfiedLinkError

我有一個帶有本機代碼的Android應用程序,我使用openCV庫。 在手機中運行應用程序時一切正常,但是當我嘗試在平板電腦上運行它時(聯想yoga 2 pro)我遇到了這個錯誤:

01-03 11:53:13.007: E/AndroidRuntime(25632): FATAL EXCEPTION: main
01-03 11:53:13.007: E/AndroidRuntime(25632): Process: <appname>, PID: 25632
01-03 11:53:13.007: E/AndroidRuntime(25632): java.lang.UnsatisfiedLinkError: dlopen failed: "/data/app-lib/<appname>/libnative_module.so" has unexpected e_machine: 40
01-03 11:53:13.007: E/AndroidRuntime(25632):    at java.lang.Runtime.loadLibrary(Runtime.java:364)
01-03 11:53:13.007: E/AndroidRuntime(25632):    at java.lang.System.loadLibrary(System.java:526)
01-03 11:53:13.007: E/AndroidRuntime(25632):    at <appname>.SplashActivity$1.onManagerConnected(SplashActivity.java:35)
01-03 11:53:13.007: E/AndroidRuntime(25632):    at org.opencv.android.AsyncServiceHelper$1.onServiceConnected(AsyncServiceHelper.java:318)
01-03 11:53:13.007: E/AndroidRuntime(25632):    at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1127)
01-03 11:53:13.007: E/AndroidRuntime(25632):    at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1144)
01-03 11:53:13.007: E/AndroidRuntime(25632):    at android.os.Handler.handleCallback(Handler.java:733)
01-03 11:53:13.007: E/AndroidRuntime(25632):    at android.os.Handler.dispatchMessage(Handler.java:95)
01-03 11:53:13.007: E/AndroidRuntime(25632):    at android.os.Looper.loop(Looper.java:149)
01-03 11:53:13.007: E/AndroidRuntime(25632):    at android.app.ActivityThread.main(ActivityThread.java:5283)
01-03 11:53:13.007: E/AndroidRuntime(25632):    at java.lang.reflect.Method.invokeNative(Native Method)
01-03 11:53:13.007: E/AndroidRuntime(25632):    at java.lang.reflect.Method.invoke(Method.java:515)
01-03 11:53:13.007: E/AndroidRuntime(25632):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:825)
01-03 11:53:13.007: E/AndroidRuntime(25632):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:641)
01-03 11:53:13.007: E/AndroidRuntime(25632):    at dalvik.system.NativeStart.main(Native Method)

這是在SplashActivity的第45行:

System.loadLibrary("native_module");

有人可以幫我解決這個錯誤嗎? 或者我做錯了什么?

您的平板電腦基於Intel Atom CPU。 您必須為APP_ABI=x86構建native_module 請注意,您還需要兼容版本的OpenCV。

更新:在這種特殊情況下,該應用程序是為x86和ARM構建的。 但是app安裝程序選擇了錯誤的子文件夾,可能是因為libs/x86libs/armeabi列出的文件名不完全匹配 對於具有非平凡原生組件的應用,可靠而有效的方法是將單獨的APK上傳到PlayStore

我有一個華碩Zenfone 5(使用x86 ABI),我遇到了同樣的問題。 顯然問題出在OpenCV 2.x版本上。 開始使用OpenCV 3.x版本,問題將得到解決。

OpenCV 3.x版本有更多ABI選項,例如:

arm64v8a
arm
armv7a
mips
mips64
x86
x86-64

你可以在這里找到3.x版本。

希望它有所幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM