gpt4 book ai didi

android - Android 中的 native OpenCV UnsatisfiedLinkError libopencv_java.so not found

转载 作者:行者123 更新时间:2023-11-28 02:41:23 29 4
gpt4 key购买 nike

我看过类似的帖子,但没有一个给出正确答案。

设置:

Linux Ubuntu 14.04
Android NDK r8e
Boost 1.53
OpenCV 2.4.9

在编译时我收到了这个警告:

Compile++ thumb  : usit <= wahet.cpp
SharedLibrary : libusit.so
/home/tassilo/android-ndks/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: warning: hidden symbol '__aeabi_atexit' in /home/tassilo/android-ndks/android-ndk-r8e/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi-v7a/libgnustl_static.a(atexit_arm.o) is referenced by DSO jni/opencv/sdk/native/jni/../libs/armeabi-v7a/libopencv_java.so
Install : libusit.so => libs/armeabi-v7a/libusit.so

我还没有尝试调用我的 C++ 代码,我所做的只是创建导致此错误的库:

09-16 14:34:59.189: V/IRISREC(654): Native code library failed to load.
09-16 14:34:59.189: V/IRISREC(654): java.lang.UnsatisfiedLinkError: Cannot load library: link_image[1936]: 36 could not load needed library 'libopencv_java.so' for 'libusit.so' (load_library[1091]: Library 'libopencv_java.so' not found)

这是我的Android.mk

LOCAL_PATH := $(call my-dir)
NDK_ROOT := /home/tassilo/android-ndks/android-ndk-r8e


include $(CLEAR_VARS)

include ./jni/opencv/sdk/native/jni/OpenCV.mk

LOCAL_MODULE := usit
LOCAL_SRC_FILES := wahet.cpp

LOCAL_C_INCLUDES:= ./jni/opencv/sdk/native/jni/include
LOCAL_CFLAGS += -I$(LOCAL_PATH)/boost/include/boost-1_53
LOCAL_LDLIBS += -L$(LOCAL_PATH)/boost/lib/ -lboost_system-gcc-mt-1_53 -lboost_regex-gcc-mt-1_53 -lboost_filesystem-gcc-mt-1_53 -lboost_date_time-gcc-mt-1_53 \
-L$(NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi \
-lgnustl_static \
-L$(SYSROOT)/usr/lib -llog

include $(BUILD_SHARED_LIBRARY)

Application.mk

APP_PLATFORM          := android-8
APP_ABI := armeabi-v7a
APP_OPTIM := debug
NDK_DEBUG := 1

NDK_TOOLCHAIN_VERSION := 4.6
APP_STL := gnustl_static
APP_CPPFLAGS := -fexceptions -frtti

库加载到我的 MainAcitvity.java

static {
try {
System.loadLibrary("usit");
} catch (UnsatisfiedLinkError e) {
Log.v(TAG, "Native code library failed to load.\n" + e);
} catch (Exception e) {
Log.v(TAG, "Exception: " + e);
}
}

所以错误是在我的第一个 catch block 中抛出的。需要的库文件在我的文件夹里

./jni/opencv/sdk/native/libs/ -armeabi/ -armeabi-v7a etc.

几天以来,我一直在处理所有这些问题。感谢任何帮助。

最佳答案

关于隐藏符号'__aeabi_atexit'answer opencv.org 建议使用 gnuSTL_shared 而不是 gnuSTL_static

这符合我个人使用 opencv_java 的经验,意味着 Java 代码必须相应更改:

static {
try {
System.loadLibrary("gnustl_shared"); // added
System.loadLibrary("opencv_java");
System.loadLibrary("usit");
} catch (UnsatisfiedLinkError e) {
Log.v(TAG, "Native code library failed to load.\n" + e);
} catch (Exception e) {
Log.v(TAG, "Exception: " + e);
}
}

Android.mk

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

OPENCV_INSTALL_MODULES:=on
include ./jni/opencv/sdk/native/jni/OpenCV.mk

LOCAL_MODULE := usit
LOCAL_SRC_FILES := wahet.cpp

LOCAL_C_INCLUDES := \
$(LOCAL_PATH)/opencv/sdk/native/jni/include \
$(LOCAL_PATH)/boost/include/boost-1_53

LOCAL_LDLIBS += -L$(LOCAL_PATH)/boost/lib/ \
-lboost_system-gcc-mt-1_53 \
-lboost_regex-gcc-mt-1_53 \
-lboost_filesystem-gcc-mt-1_53 \
-lboost_date_time-gcc-mt-1_53 \
-llog

include $(BUILD_SHARED_LIBRARY)

Application.mk

APP_PLATFORM          := android-8
APP_ABI := armeabi-v7a
APP_OPTIM := debug
NDK_DEBUG := 1

NDK_TOOLCHAIN_VERSION := 4.6
APP_STL := gnustl_shared
APP_CPPFLAGS := -fexceptions -frtti

关于android - Android 中的 native OpenCV UnsatisfiedLinkError libopencv_java.so not found,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25869325/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com