赞
踩
每次做一些新的测试都有必要记录一下,以防下次忘记。也为下次节省时间。
开发环境
一般开发板的SDK都会自带有交叉编译工具链。我这里的是君正的开发板T31,用的是SDK 包里的4.7.2版本的工具链。如下:
将mips-gcc472-glibc216-64bit-r2.3.3.7z减压到/opt目录下
配置工具链路径,vi打开~/.bashrc文件,在末尾添加工具链路径export PATH=/opt/mips-gcc472-glibc216-64bit/bin:$PATH,如下
终端输入:mips-linux-gnu-gcc -v检查是否安装成功。如下图则安装成功。
opencv源码下载,上官网下载相应的版本源码包:https://opencv.org/releases/。我这里下载的是3.4.0版本的源码包。如下过程:
点击Sources即可下载。下载完后,减压到/opt目录下,如下
安装cmake-gui工具和cmake,命令行安装即可
apt install cmake, apt install cmake-gui
1)cd进入减压好的opencv-3.4.0目录
2)建立建立两文件夹,名字任意。
如:mkdir mips_build , mkdir mips_install
3) 运行cmake-gui配置opencv生成makefile。
终端运行cmake-gui ..如下
出现如下图cmake gui配置界面。
接下来就是相关的配置过程,照步骤配置即可。
4)配置源码路径和输出路径
“Where is the source code“ 选择我们解压好的opencv-3.4.0根目录
”where to build the binaries”选择我们新建的mips_build目录
5)点击configure按钮进入配置向导
我们需要编译的是mips平台opencv库,所以我们选择Unix Makefiles,接着选择Specify options for cross-compiling,
6)点击Next进入交叉编译环境配置页面
“Operating System”填写Linux
“Processor”填写mips
“C Compilers”填写交叉编译器( mips-linux-gnu-gcc )的路径
“C++ Compilers”填写( mips-linux-gnu-g++ )路径
“Target Root”填写交叉编译器的所在目录
然后选择Finish,信息基本就配置好了。如下图:
7)接下来我么还需修该配置默认安装目录/usr/local,改为我们新建的目录mips_install
CMAKE_INSTALL_PREFIX /opt/ opencv-3.4.0/mips_install |
|
然后点击configure,再点击generate生成Makefile。然后关闭cmake-gui配置界面cd到mips_build目录进行编译。 |
root@ubuntu:/opt/opencv-3.4.0/mips_build# make -j4 //开四个线程来编译,这样比较快
如果遇到错误,可以运行cmake-gui工具进行修改相关配置,然后点击Configure和Generate创建Makefile。然后再次进行编译。
例如这里就运到了编译错误,如下图:
如图可见,可能由于libz.so这个态库的添加导致的问题,这里需要再进入到cmake-gui进行如下一步配置。
在search搜索DUILD_ZLIB这个选项,并勾上。
为了方便查找,勾工具的Advanced和Grouped选项,我们会在CMAKE树找到以下这4个选项, 分别增加-fPIC即可。
CMAKE_CXX_FLAGS -fPIC
CMAKE_CXX_FLAGS_DEBUG -g -fPIC
CMAKE_C_FLAGS -fPIC
CMAKE_C_FLAGS_DEBUG -g -fPIC
然后再找到以下两项 ,分别加上 -lpthread -lrt -ldl
CMAKE_EXE_LINKER_FLAGS -lpthread -lrt -ldl
CMAKE_EXE_LINKER_FLAGS_DEBUG -lpthread -lrt –ldl
配置成如下图绿箭头所指。点击Configure和Generate创建Makefile,并关闭cmake-gui,然后再次编译。
然后点击Configure和Generate创建Makefile,并关闭cmake-gui,然后再次编译。结果如下:
如图可见编译又遇到了错误,原因是由于dc1394这个模块导致的,一样的我们再进行cmake-gui的配置;取消WITH_1394的选项,如下图:
再次编译,结果如下图:
如图还是再次遇到编译错误,这次是因为找不gtk-3这些库而导致的编译错误,我们再次进入到cmake-gui配置界面,然后找到gtk,并取消该选项。
然后再次configure,generate生成Makefile再次编译。结果如下图:
再次遇到编译错误,这里我们往上滑查看一下原因,发现在编译到66%的时候出现了编译错误。
如图,错误的原因是perf这个模块,我们再次进入到cmake-gui,将perf有关的选项打上勾。如下图
然后再次configure,generate生成Makefile,再次编译。结果如下图:
如图,编译成功。执行:make install,将编译的lib库安装到mips_install目录下,之后直接将该目录下的lib库移植到开发板的/lib目录下即可完成opencv库的移植。如下图:
root@ubuntu:/opt/opencv-3.4.0/mips_build# make install
如图中所示,mips_install/lib 下的lib库即是此次编译opencv得到的,移植到开发板即可。
将cmake-gui配置编译好的opencv库移植到根文件系统rootfs的lib目录下,到此opencv移植到开发板就完成了。接下来就写一个测试用例来检测一下是否移植成功。看步骤5.
5,开发板测试Opencv例子
交叉工具链编译opencv工程项目有两次方法:1,写CMakeLists.txt文件生成Makefile文件,然后make进行编译。2,就是通过命令行来编译。
这里我是通过第二种,命令行的方式来编译opencv工程例子的,至于第一种还没试过,有试过的网友可以教教我怎么通过Makefile的方式来进行编译opencv的工程项目。这里废话不多说,直接看下面过程:
1)配置opencv 的lib库,及include头文件路径。(这里即是,将刚才我们通过交叉编译工具链编译得到的mips_install路径下的opencv库及头文件路径,配置到环境变量里去。)
找到刚才编译opencv时的安装路径,我的如下图
又因为我们用命令行编译的时候用到pkg-config这个工具来链接相应的opencv库和头文件,所以这里我需要把mips_install/lib/pkgconfig/的路径添加到/etc/bash.bashrc文件的末尾,这样用命令行编译的时候通过pkg-config工具就可以找到相应的opencv库和头文件了。添加如下;
然后运行:source /etc/bash.bashrc使配置生效。在运行:pkg-config --cflags --libs opencv 查看配置结果。如下图;
结果如图,则说明配置成功。接下来就写一个例子来测试一下。看下一步;
这里编写一个opencv工程来显示lena.jpg这张图片,项目程序目录如下:
test.cpp的内容如下:
#include <cv.h>
#include <highgui.h>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
cout <<"OpenCV version : "<< CV_VERSION <<endl;
IplImage* image = cvLoadImage("lena.jpg");
if(image == NULL)
{
cout<<"loud image fail"<<endl;
return -1;
}
cvNamedWindow("src", 1);
cvShowImage("src", image);
cvWaitKey();
cvDestroyWindow("src");
cvReleaseImage(&image);
return 0;
}
然后开始用命令行编译,给出命令:
mips-linux-uclibc-gnu-g++ `pkg-config --cflags --libs opencv` test.cpp -o test
[命令解释]
1) mips-linux-uclibc-gnu-g++ “是我的交叉c++编译工具链,这里换成你自己的就可以了”
2)pkg-config
工具“pkg-config”,它主要有以下几个功能:
1.检查库的版本号。如果所需要的库的版本不满足要求,它会打印出错误信息,避免链接错误版本的库文件。
2.获得编译预处理参数,如宏定义,头文件的位置。
3.获得链接参数,如库及依赖的其它库的位置,文件名及其它一些连接参数。
4.自动加入所依赖的其它库的设置
所有有了这个工具之后我们的编译就很方便了(不过在此之前你要确保你安装的OpenCV的安装链接库文件的目录下有一个pkgconfig文件夹,在该文件夹里面有个opencv.pc的文件,其实这就是pkg-config下OpenCV的配置文件)。
使用pkg-config时,选项--cflags 它是用来指定程序在编译时所需要头文件所在的目录,选项 --libs则是指定程序在链接时所需要的动态链接库的目录。例如我下面这张图就显示了我电脑上OpenCV的相关目录。
3) test.cpp “要编译的源文件”
4) -o test “将源文件编译后的可执行文件命名为test”
编译结果如下图:
这里成功编译,将图中的可执行文件test,及图片lena.jpg移植到开发板目录下即可运行了(前提你的开发板LCD显示器,否则无法显示该图片)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。