我目前正面临一个特定的本地编译问题。为了清楚起见,我已经完成了openv -ndk配置,没有错误。事实上,我已经编译并执行了源代码中的一些示例和教程。然而,当我试图编译它时,它给了我一个错误,表明我在库中丢失了一些东西。下面是来自eclipse的日志文件。注意,在eclipse项目中,我确实有libopencv_java。在obj->local->armeabi-v7a->objs目录下。
03-19 10:14:11.142: D/dalvikvm(6360): Trying to load lib /data/app-lib/com.example.detectimage-2/libnative_sample.so 0x4141bc60
03-19 10:14:11.152: E/dalvikvm(6360): dlopen("/data/app-lib/com.example.detectimage-2/libnative_sample.so") failed: Cannot load library: soinfo_link_image(linker.cpp:1635): could not load library "libopencv_java.so" needed by "libnative_sample.so"; caused by load_library(linker.cpp:745): library "libopencv_java.so" not found
03-19 10:14:11.152: E/JNI(6360): WARNING: Could not load libmysharedlibrary.so
03-19 10:14:11.152: I/Sample::Activity(6360): Instantiated new class com.example.detectimage.DetectImageActivity
03-19 10:14:11.162: I/Sample::Activity(6360): onCreate
03-19 10:14:11.162: D/dalvikvm(6360): Trying to load lib /data/app-lib/com.example.detectimage-2/libnative_sample.so 0x4141bc60
03-19 10:14:11.162: E/dalvikvm(6360): dlopen("/data/app-lib/com.example.detectimage-2/libnative_sample.so") failed: Cannot load library: find_library(linker.cpp:889): "/data/app-lib/com.example.detectimage-2/libnative_sample.so" failed to load previously
03-19 10:14:11.162: W/dalvikvm(6360): Exception Ljava/lang/UnsatisfiedLinkError; thrown while initializing Lcom/example/detectimage/CameraPreview;
03-19 10:14:11.172: D/AndroidRuntime(6360): Shutting down VM
03-19 10:14:11.172: W/dalvikvm(6360): threadid=1: thread exiting with uncaught exception (group=0x40f06ae0)
03-19 10:14:11.182: E/AndroidRuntime(6360): FATAL EXCEPTION: main
如果你需要我的Android。
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
OPENCV_INSTALL_MODULES:=on
OPENCV_CAMERA_MODULES:=off
include D:DevelopmentOpenCV-2.4.8-android-sdksdknativejniOpenCV.mk
LOCAL_C_INCLUDES:= D:DevelopmentOpenCV-2.4.8-android-sdksdknativejniinclude
LOCAL_MODULE := native_sample
LOCAL_CFLAGS := -Werror -O3 -ffast-math
LOCAL_LDLIBS += -llog
LOCAL_SRC_FILES := jni_part.cpp
include $(BUILD_SHARED_LIBRARY)
坦率地说,我已经搜索了所有的资源,并尝试了很多,它就是不起作用。也许我对这个话题不熟悉,某些高级解决方案我无法跟上。我希望我能在这里得到更好的理解。非常感谢您的帮助。
看起来这是一个运行时错误,您可以毫无问题地构建本机代码。为了在你的。apk中包含任何必要的。so文件,你需要让它们在你想要部署的项目的lib/子目录中可用。
这可以像手动复制它们一样简单,但ant应该足够聪明地为您复制它。如果它没有这样做,则可能有其他事情发生。
另一个选择是静态链接到OpenCV。您可以通过在包含OpenCV之前添加这一行来做到这一点。
OPENCV_LIB_TYPE :=STATIC
这个,当然,只有当你的OpenCV构建带有静态库(lib*.a)时才有意义。您将注意到,通过静态链接到OpenCV, .so文件的文件大小将略有增加,但不需要打包libopencv_java。所以了。你的。so包含了OpenCV所需的一切。
总而言之,如果你的项目使用任何。so文件,当.apk被打包时,将它们放在/lib下,以便你的应用程序可以在启动时找到它们。