Android 4.2版NDK:库加载崩溃:load_library(linker.cpp:750)|| soinfo_link_image || libhoudini.so || OpenCV的 [英] Android 4.2 ndk: library loading crash: load_library(linker.cpp:750) || soinfo_link_image || libhoudini.so || opencv

查看:2245
本文介绍了Android 4.2版NDK:库加载崩溃:load_library(linker.cpp:750)|| soinfo_link_image || libhoudini.so || OpenCV的的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用了OpenCV的包括本地库。
图书馆建立良好,所有的设备和仿真效果很好,但不是在Android 4.2的。它崩溃的的System.loadLibrary(MYLIB);

该库是专为armeabi-V7A armeabi 86 MIPS(我看到jnilibs文件夹中访问生成的所有文件等等)

我被困在这个bug,因为我无法找到这可以解释我的问题在互联网上的任何答案。

无法加载库:soinfo_link_image(linker.cpp:1635):无法加载库libopencv_java.so,登录跟踪:

  1755年至1755年/ com.ex.app E / AndroidRuntime:致命异常:主要
   java.lang.UnsatisfiedLinkError中:无法加载库:soinfo_link_image(linker.cpp:1635):无法加载库libopencv_java.so被libmylib.so需要;造成load_library(linker.cpp:745):库libopencv_java.so找不到
           在java.lang.Runtime.loadLibrary(Runtime.java:371)
           在java.lang.System.loadLibrary(System.java:535)
           在com.ex.app.core.MyApplication.initVippAsync(MyApplication.java:198)
           在com.ex.app.core.MyApplication.onCreate(MyApplication.java:100)
           在android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1000)
           在android.app.ActivityThread.handleBindApplication(ActivityThread.java:4391)
           在android.app.ActivityThread.access $ 1300(ActivityThread.java:141)
           在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1294)
           在android.os.Handler.dispatchMessage(Handler.java:99)
           在android.os.Looper.loop(Looper.java:137)
           在android.app.ActivityThread.main(ActivityThread.java:5039)
           在java.lang.reflect.Method.invokeNative(本机方法)
           在java.lang.reflect.Method.invoke(Method.java:511)
           在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:793)
           在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
           在dalvik.system.NativeStart.main(本机方法)

Android.mk:

  LOCAL_PATH:= $(叫我-DIR)包括$(CLEAR_VARS)
OPENCV_INSTALL_MODULES:=上
包括/Users/ahmed/Documents/openCv4android/OpenCV-2.4.10-android-sdk/sdk/native/jni/OpenCV.mk
LOCAL_MODULE:= MYLIB
LOCAL_LDLIBS + = -llog -ldl
LOCAL_SRC_FILES:= myfile.c文件
包括$(BUILD_SHARED_LIBRARY)

Application.mk:

  APP_ABI:= armeabi-V7A armeabi 86 MIPS
APP_PLATFORM:=机器人-16


解决方案

我发现我的答案。这两个步骤:

1 /如果您使用的是仿真器Genymotion,使用Android 4.2.2,你将有一个缺失库,造成Genimotion的更新之一。请参见这个
解决方案:
(1)>下载以下zip文件:这里
(2)>简单地将它拖放到你的模拟器。
(3)>重新启动你的模拟器。

2 /在Android 4.2操作系统有问题找路径JNI运在APK库。例如,在我而言,我使用一个使用OpenCV的库库JNI。
对于每一个设备和Android版本调用的System.loadLibrary(MYLIB); 运作良好, MYLIB 自动加载OpenCV的图书馆。
为Android 4.2,如@克里斯在他的评论中说,我装的OpenCV明确,所以:

 的System.loadLibrary(opencv_java);
的System.loadLibrary(MYLIB);

I am using a native library that includes opencv. The library builds well and works well in all devices and emulators, but not on Android 4.2 ones. It crashes on System.loadLibrary("mylib");.

The library is built for armeabi-v7a armeabi x86 mips (I see in the jnilibs folder that all the so files were generated)

I am stuck on this bug because I couldn't find any answer on the internet which could explain my problem.

Cannot load library: soinfo_link_image(linker.cpp:1635): could not load library "libopencv_java.so", log trace:

1755-1755/com.ex.app E/AndroidRuntime﹕ FATAL EXCEPTION: main
   java.lang.UnsatisfiedLinkError: Cannot load library: soinfo_link_image(linker.cpp:1635): could not load library "libopencv_java.so" needed by "libmylib.so"; caused by load_library(linker.cpp:745): library "libopencv_java.so" not found
           at java.lang.Runtime.loadLibrary(Runtime.java:371)
           at java.lang.System.loadLibrary(System.java:535)
           at com.ex.app.core.MyApplication.initVippAsync(MyApplication.java:198)
           at com.ex.app.core.MyApplication.onCreate(MyApplication.java:100)
           at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1000)
           at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4391)
           at android.app.ActivityThread.access$1300(ActivityThread.java:141)
           at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1294)
           at android.os.Handler.dispatchMessage(Handler.java:99)
           at android.os.Looper.loop(Looper.java:137)
           at android.app.ActivityThread.main(ActivityThread.java:5039)
           at java.lang.reflect.Method.invokeNative(Native Method)
           at java.lang.reflect.Method.invoke(Method.java:511)
           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
           at dalvik.system.NativeStart.main(Native Method)

Android.mk:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
OPENCV_INSTALL_MODULES:=on
include /Users/ahmed/Documents/openCv4android/OpenCV-2.4.10-android-sdk/sdk/native/jni/OpenCV.mk
LOCAL_MODULE    := mylib
LOCAL_LDLIBS += -llog -ldl
LOCAL_SRC_FILES := myFile.c
include $(BUILD_SHARED_LIBRARY)

Application.mk:

APP_ABI := armeabi-v7a armeabi x86 mips
APP_PLATFORM := android-16

解决方案

I found my answer. It's two steps:

1/ If you're using an emulator Genymotion, with an Android 4.2.2, you will have a missing library, caused by one of the updates of Genimotion. See this. Solution : (1)> download the following zip file: here. (2)> simply drag and drop it to your emulator. (3)> restart your emulator.

2/ In the Android 4.2 the OS has problems to find paths to jni libraries shipped in the apk. For example in my case, I am using a jni library that uses the openCV library. For every device and android version calling System.loadLibrary("mylib"); worked well and mylib loaded automatically the opencv library. For the Android 4.2, as @Chris said in his comment, I loaded openCV explicitly, so :

System.loadLibrary("opencv_java");
System.loadLibrary("mylib");

这篇关于Android 4.2版NDK:库加载崩溃:load_library(linker.cpp:750)|| soinfo_link_image || libhoudini.so || OpenCV的的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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