手写选择题识别-生成编译opencv项目.so文件-失败

问题:现在是需要将以c++编写的opencv 连接到android中来。
一个直接在android中配置 opencv
一个是获得opencv的so文件。
关键的问题是对单独获取到的图片,转换成需要的mnist数据格式再输入到模型中去是一个问题。

本来看网上大致的分为了这两种,一个是直接在android里面调用opencv,直接利用opencv4android,然后改造自己的cpp.可是我对jni又不熟,看了下c代码的形式 ,当时果断的放弃了,不知道具体要改多少cpp中的代码.另外一个当然是直接将c++项目导入成.so文件.

下面就是打算将c++ 和opencv项目 生成动态链接.so的过程(虽然失败放弃了,但是连记录都不记的话,就真是白忙活了,也现在占个坑,以后万一还得走这条路怎么办?)

那vs直接能将项目生成.so文件吗?
c++在windows下一般的动态链接库是dll,而现在android是基于unix的,所以动态链接文件是.so文件.
这c++项目最主要的是依赖了opencv计算机视觉库,所以必须在linux配置好opencv。也就是编译opencv源码,生成opencv.so文件,当时是这样想的。

一开始想要编译opencv的时候,刚好硬盘不是很大,使用命令cmake的时候,直接不足。然后就去扩容啊 ,结果也是罪了 ,得到一个就给我(起始和终点差不多)1m大小的 空间,算了最后,删除了以前的资源。

再来编译的时候想起了cmake-gui这个可视化工具。虽然说和命令行代码的效果是一样的,但是毕竟这个好看点,熟悉点。
这中间遇到了好多的问题()。

手写选择题识别-生成编译opencv项目.so文件-失败_第1张图片

手写选择题识别-生成编译opencv项目.so文件-失败_第2张图片

手写选择题识别-生成编译opencv项目.so文件-失败_第3张图片

手写选择题识别-生成编译opencv项目.so文件-失败_第4张图片

出现红色的时候,我就直接再configure一次。然后没问题。
手写选择题识别-生成编译opencv项目.so文件-失败_第5张图片

然后就是generate。

注意的是opencv的type需要的是release版本,所以需要下面操作。另外同样的去勾选需要添加的依赖。
手写选择题识别-生成编译opencv项目.so文件-失败_第6张图片

后面的就是在刚才选择生成文件的文件夹中。运行cmake,make install命令。
手写选择题识别-生成编译opencv项目.so文件-失败_第7张图片

手写选择题识别-生成编译opencv项目.so文件-失败_第8张图片

手写选择题识别-生成编译opencv项目.so文件-失败_第9张图片

手写选择题识别-生成编译opencv项目.so文件-失败_第10张图片

手写选择题识别-生成编译opencv项目.so文件-失败_第11张图片

install完成之后 需要配置一些环境参数问题。(只能这样的截别人的图了,自己的当时还不知道哪些能用,没保存)

手写选择题识别-生成编译opencv项目.so文件-失败_第12张图片

嗯 这个opencv.conf文件本来是个空的,当时我还怀疑有问题,后面运行 的没问题就算了。
手写选择题识别-生成编译opencv项目.so文件-失败_第13张图片

上面配置好了,就是写个测试文件来看看是否编译成功。结果这块也是花了不少的时间,后面总结起来就是各种依赖的路径没有添加进去。
当时在这块碰到的又两个 一个是qt的,一个是lib

手写选择题识别-生成编译opencv项目.so文件-失败_第14张图片
想想要这个qt有什么用,去cmake中取消一次,没有用。
手写选择题识别-生成编译opencv项目.so文件-失败_第15张图片
那我也没有装qt这个,要不去装一个,然后将路径添加进去。

后来看到是在anaconda中这样的so文件,刚好找到下面的那个试了试,成功了,才发现是没有添加到路径。

手写选择题识别-生成编译opencv项目.so文件-失败_第16张图片
上面的编译问题解决了 ,然后也生成了main可以执行的程序,执行时 ,后面又出现这样的一个。
手写选择题识别-生成编译opencv项目.so文件-失败_第17张图片

当然这个导入语句不能直接从问题上看出导入什么路径,这个解决方案的出处,忘记截图了,应该。
这里写图片描述
手写选择题识别-生成编译opencv项目.so文件-失败_第18张图片

这样能执行文件了。

好了,将自己的cpp和h文件添加进来 执行吧,注意用下面的语句的格式来链接opencv。

以前没有注意过linux下的g++。现在发现各种问题。就是这个问题。
这里写图片描述
手写选择题识别-生成编译opencv项目.so文件-失败_第19张图片
手写选择题识别-生成编译opencv项目.so文件-失败_第20张图片
这里写图片描述
上面的还好理解是,自己的编写方式问题。
整了一段时间,g++升级了,检查严格了,c++11,不支持itoa 等等,后面的添加了相应的头文件都不行,最后一个是换了一个函数,另外的看着当时写了,但是没有用到,就直接删除了。
手写选择题识别-生成编译opencv项目.so文件-失败_第21张图片
手写选择题识别-生成编译opencv项目.so文件-失败_第22张图片

这里写图片描述

在来生成.so文件和调用这个.so文件时 又是好多的问题。
手写选择题识别-生成编译opencv项目.so文件-失败_第23张图片

比如动态链接的查找路径问题,这个是没有将当前路径添加查找路径中去。

这里写图片描述

这里写图片描述

添加进去就好了。

最后的问题就是这个(后面还有一大串):
手写选择题识别-生成编译opencv项目.so文件-失败_第24张图片

当时想着,先写一个简单的函数测试下。这个一开始写的是print语法形式报的错误。后面改成cout就好了。
手写选择题识别-生成编译opencv项目.so文件-失败_第25张图片
更简单点就是报这样的错。但是也不影响它的错误的存在,只是没有了cv方面的。
手写选择题识别-生成编译opencv项目.so文件-失败_第26张图片

这个可能是(心)当时累了,没有找到具体的问题是什么,所以找了几下 没有找到解决方案。(以后再继续的话 可以从这里开始。)
发现就算最后生成了正常的so文件,到android中去,还是得用jni的方式,重写接口,因为不符合java的接口形式。
所以觉得 一开始直接opencv4android,所以这个就暂时放弃了,一天的坑,没有爬出来。

嗯 ,接下来是时候爬入另外一个坑了。

你可能感兴趣的:(工具)