NDK編譯依賴opencv靜態庫的arm64-v8a動態庫


遇到的問題:寫完Android.mk和Application.mk文件,然后使用cygwin+NDK編譯

總是遇到下面的編譯錯誤:

fatal error: opencv2/core.hpp: No such file or directory
#include "opencv2/core.hpp"

 

在網上試了很多方法,都不奏效。

最終解決問題的辦法是:將opencv和opencv2文件夾復制到這個目錄:

D:\android-ndk-r17c\sysroot\usr\include

然后編譯通過了。

因為引入opencv時代碼是這樣寫的:

#include "opencv2/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/objdetect/objdetect.hpp"  
#include "opencv2/ml/ml.hpp" 
#include "opencv2/imgproc/imgproc.hpp"

編譯器要去自己能查找的路徑去搜索,很明顯的搜索路徑就是NDK路徑,所以這個方法奏效了。

使用NDKr17c編譯,其中opencv和opencv2文件夾復制到了D:\android-ndk-r17c\sysroot\usr\include文件夾下解決編譯找不到文件問題。

在使用NDKr10e編譯,由於沒有sysroot文件夾,考慮到mk文件中配置編譯器4.9和使用-std=c++11,於是找到下面這個路徑,將opencv和opencv2文件夾復制到下面的路徑同樣解決了"opencv2/core.hpp"等opencv頭文件找不到的問題。

D:\android-ndk-r10e\sources\cxx-stl\gnu-libstdc++\4.9\include

 

可能這不是最好的解決問題的辦法,但這是一個奏效的方法。

希望可以找到更好的方法。

 參考博客:https://blog.csdn.net/x397794823/article/details/51122742

下面附上mk文件:

Android.mk

 

LOCAL_PATH:=$(call my-dir)
my_LOCAL_PATH := $(LOCAL_PATH)
include $(my_LOCAL_PATH)/../../Module/ModuleAndroid64.mk
LOCAL_PATH := $(my_LOCAL_PATH)
include $(CLEAR_VARS)
LOCAL_MODULE:=AndroidModule
FILE_LIST := $(wildcard $(LOCAL_PATH)/*.cpp)
LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%)
LOCAL_LDLIBS    := -llog
LOCAL_SHARED_LIBRARIES := Model
#LOCAL_ALLOW_UNDEFINED_SYMBOLS := true
include $(BUILD_SHARED_LIBRARY)

Application.mk

APP_PLATFORM := android-21
#APP_STL := c++_static 
APP_STL := gnustl_static 
#APP_STL := gnustl_shared
APP_CPPFLAGS += -std=c++11
APP_CPPFLAGS +=  -frtti -fexceptions
#NDK_TOOLCHAIN_VERSION = clang
NDK_TOOLCHAIN_VERSION = 4.9
#當編譯靜態庫時,可以如下這樣寫,那么靜態庫就會編譯了
#APP_MODULES :=iconv 
APP_ABI := arm64-v8a
APP_MODULES := Module AndroidModule
#This optional variable can be defined to either 'release' or'debug',A 'release' mode is the default
#APP_OPTIM :=debug
ModuleAndroid64.mk


LOCAL_PATH := $(call my-dir)
my_LOCAL_PATH := $(LOCAL_PATH)
# Include all libs (built and prebuilt) D:/OpenCV-3.4.9-android-sdk/sdk/native/jni
OPENCV_PATH := D:/OpenCV-3.4.9-android-sdk/sdk/native/jni

LOCAL_PATH := $(my_LOCAL_PATH)


include $(CLEAR_VARS)

#OpenCV_INSTALL_MODULES := on
OPENCV_INSTALL_MODULES:=on
OPENCV_LIB_TYPE := STATIC
include $(OPENCV_PATH)/OpenCV.mk 

LOCAL_C_INCLUDES +=  \
           $(OPENCV_PATH)/include
           
LOCAL_MODULE   += Module

FILE_LIST := $(wildcard $(LOCAL_PATH)/*.cpp)
LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%)

LOCAL_CFLAGS += -std=c++11 -frtti -fexceptions -fopenmp -w
LOCAL_LDLIBS    += -llog -lc -lm -lz -ldl

include $(BUILD_SHARED_LIBRARY)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM