NDK编译依赖opencv静态库的arm64-v8a动态库

摘要:
当引入opencv时,代码如下所示:#include“opencv2/core.hpp”#include”opencv2/highgui/highgui.hpp“#include”openkv2/objdetect/objdetect.hpp“#include”opencv2/ml/ml.hpp“#include”opencv2/imgproc/imgproc.hpp“编译器将搜索它可以找到的路径,而明显的搜索路径是NDK路径,因此此方法有效。用NDKr17c编译。opencv和opencv2文件夹被复制到D:android-ndk-r17csysrootusrinclude文件夹,以解决编译过程中找不到文件的问题。使用NDKr10e编译时,没有sysroot文件夹。考虑到在mk文件中配置了编译器4.9,并且使用了-std=c++11,可以找到以下路径。将opencv和opencv2文件夹复制到以下路径也解决了找不到opencv头文件(如“opencv2/core.hpp”)的问题。

遇到的问题:写完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-r17csysrootusrinclude

然后编译通过了。

因为引入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-r17csysrootusrinclude文件夹下解决编译找不到文件问题。

在使用NDKr10e编译,由于没有sysroot文件夹,考虑到mk文件中配置编译器4.9和使用-std=c++11,于是找到下面这个路径,将opencv和opencv2文件夹复制到下面的路径同样解决了"opencv2/core.hpp"等opencv头文件找不到的问题。

D:android-ndk-r10esourcescxx-stlgnu-libstdc++4.9include

可能这不是最好的解决问题的办法,但这是一个奏效的方法。

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

 参考博客: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)

免责声明:文章转载自《NDK编译依赖opencv静态库的arm64-v8a动态库》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇iOS: 实现微信支付loj10222下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

操作笔记:linux下安装mysql

1,检查linux下是否安装了mysql shell指令如下: [root@iZ945sgm0ugZ ~]# rpm -qa|grep -i mysql 如果有的话:做出挨个删除(eg:rpm -ev mysql-connector-odbc-5.2.5-6.el7.x86_64) [root@iZ945sgm0ugZ ~]# rpm -qa|grep -...

windows server中opencv运行过程中MF.dll/MFReadWrite.dll/MFPlat.DLL文件丢失问题解决

windows server 2008/2012 使用opencv出现 DLL load failed错误,发现缺失部分dll:MFPlat.dll、MF.dll、MFReadWrite.dll等等,原因:服务器版本默认没有安装windows media player。1、解决方法1:使用如下步骤安装windows media player:1)、打开“服...

windows环境下的Anaconda安装与OpenCV机器视觉环境搭建

https://blog.csdn.net/iracer/article/details/80498732 本文介绍win7和win10系统下通过Anaconda配置基于python语言的机器视觉编程环境(博主测试了两个系统下的安装基本相同),主要内容包括: Anaconda下载安装OpenCV下载安装测试安装结果本文安装的版本为:Anaconda4.2+...

Linux下C语言多文件的编译以及makefile的应用

1.关于编译和链接     一般来说,无论是C、C++,首先要把源文件编译成中间代码文件,在Windows下也就是.obj文件,UNIX下是.o文件,即Object File,这个动作叫做编译(compile)。然后再把大量的Object File合成执行文件,这个动作叫作链接(link)。         也就是源文件(.c 文件或者.cpp文件)首先会...

OpenCV学习笔记(30)KAZE 算法原理与源码分析(四)KAZE特征的性能分析与比较

KAZE系列笔记:1.OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波 2.OpenCV学习笔记(28)KAZE 算法原理与源码分析(二)非线性尺度空间构建 3.OpenCV学习笔记(29)KAZE 算法原理与源码分析(三)特征检测与描述 4.OpenCV学习笔记(30)KAZE 算法原理与源码分析(四)KAZE特征的性能分...

更新Linux下openssl路径和库路径

更新Linux下openssl路径和库路径 参考ubuntu 中更新openssl库 新版openssl路径为老师博客中默认的路径/root/rocopenssl mv /usr/bin/openssl /usr/bin/openssl.bak mv /usr/include/openssl /usr/include/openssl.bak ln -s...