2013-02-13 71 views
0

我想将OpenCV(2.4.3.2)静态链接到我的项目。现在我Android.mk看起来像这样静态链接OpenCV 2.4.3.2

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 
OPENCV_CAMERA_MODULES:=on 
OPENCV_INSTALL_MODULES:=on 

include /Users/jamiematthews/Documents/Android-Projects/OpenCV-2.4.3-android-sdk/sdk/native/jni/OpenCV.mk 

LOCAL_MODULE := jni_part 
LOCAL_SRC_FILES := jni_part.cpp 
LOCAL_LDLIBS += -llog -ldl 
LOCAL_LDLIBS += -L$(SYSROOT)/usr/lib -llog 
include $(BUILD_SHARED_LIBRARY) 

会抛出错误:

Android NDK: ERROR:/Users/jamiematthews/Documents/workspace/AuthentiGuard/jni/Android.mk:on: LOCAL_SRC_FILES points to a missing file  
/Users/jamiematthews/Documents/android-ndk-r8d/build/core/prebuilt-library.mk:43: *** Android NDK: Aborting . Stop. 
Android NDK: Check that /Users/jamiematthews/Documents/Android-Projects/OpenCV-2.4.3-android-sdk/sdk/native/jni/../libs/mips/libon.so exists or that its path is correct 

任何人都知道“LOCAL_SRC_FILES点缺少文件”可能是什么意思?

PS如果我删除线

OPENCV_CAMERA_MODULES:=on 
OPENCV_INSTALL_MODULES:=on 

它编译罚款,但我不能静态链接

回答

1

找到解决方案。相信与否,这是Application.mk而不是Android.mk的问题。我已成立

APP_ABI := all 

此前,甚至不认为它可以静态影响的这一构建过程。我结束了改变它到

APP_ABI := armeabi-v7a 

现在,一切工作正常。请注意,我最终不需要OPENCV_CAMERA_MODULES:= on,我相信只有当你从JNI调用摄像头时,我不是

+0

这个解决方案不适合我,虽然我的application.mk和android.mk与你的相同,但它仍然要求下载opencvmanager以在android上运行应用程序 – ARG 2015-03-16 22:57:08

0

LOCAL_SRC_FILES显示在您的本机代码所在的文件。如果您使用本机OpenCV代码,那么您必须在此处添加您的cpp文件的名称。 如果您没有本机部件,那么您应该将OpenCV库添加到项目的libs文件夹中。 (在静态初始化的情况下)。详情请查询this page

+0

对,我使用一些本地opencv,并且这是正确的名称文件。正如我所说,如果我删除顶部的这两行,它编译和运行良好(包括调用JNI文件) – Jameo 2013-02-13 18:15:40

+0

现在我明白了,所以你可以运行程序与动态链接,但不能与静态..我认为你不能链接并运行。对于静态链接,您需要在Android.mk中设置OPENCV_LIB_TYPE:= STATIC。 – rics 2013-02-13 19:09:46

+0

我已经玩过,补充说,本身,我仍然得到相同的错误(即,在顶部包含之间添加它)。我也尝试过与之前和之后的其他两个,所以我不认为它是一个订单的东西 – Jameo 2013-02-13 19:19:56