2013-02-13 72 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