交叉编译OpenCV

什么是交叉编译?交叉编译就是在我们自己的电脑上编译出其他平台的程序。为什么要进行交叉编译?原因1:WRTnode上的Flash不够装下OpenCV编译过程中产生的文件。原因2:WRTnode编译过程会相当的漫长,就连i7的电脑都需要编译将近十分钟。因此为了提高开发效率,我们通常会选择交叉编译。

为什么要交叉编译OpenCV?因为我们如果需要在WRTnode上运行OpenCV应用,就必须编译好程序之后再上传,如果需要编译OpenCV程序,就必须先进行交叉编译,生成相应的链接库,然后才能编译成最终能实现你想要的功能的程序。所以第一步就是编译mipsel版的OpenCV。

准备工作

首先我们应该准备以下几个东西:

  1. WRTnode SDK

  2. OpenCV 源代码

  3. CMake

OpenCV的源码可以在 https://github.com/Itseez/opencv/releasesarrow-up-right 找到,这里作为举例,我们使用的是2.4.11版本的源码。

OpenCV 2.4.11源代码下载地址:https://github.com/Itseez/opencv/archive/2.4.11.tar.gzarrow-up-right

总的来说执行下面的命令就可以直接下载好了:

wget https://github.com/Itseez/opencv/archive/2.4.11.tar.gz
tar zxvf 2.4.11.tar.gz

下载好源码以后,我们再安装CMake并运行:

sudo apt-get update
sudo apt-get install cmake cmake-gui
cmake-gui

配置CMake

选好源码的目录和编译二进制文件存放的目录,比如我在桌面上创建了一个叫opencv-mipsel的目录,用来存放交叉编译的文件,所以我在where to build the binaries填上了/home/ypw/Desktop/opencv-mipsel。至于source code就是上面下载的源码所在的路径。

设置好之后点击Configure,选择最后一项,Specify options for cross-conpiling

Operating System需要填Linux而不是其他的。

C和C++编译器需要选择你的SDK目录下的mipsel-openwrt-linux-gccmipsel-openwrt-linux-g++,下面是举例:

Target Root自然就是/home/ypw/Desktop/wrtnode/staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/bin

配置好以后就可以点击Finish了!

顺利的话你将会看到许多选项,由于WRTnode并没有图形界面等原因,我们需要去掉一些选项:

  • WITH_GTK

  • WITH_FFMPEG

我们还需要修改安装的路径:CMAKE_INSTALL_PREFIX,因为我们并不想把它生成的文件与我们自己安装的OpenCV发生冲突,因此需要进行修改,比如:

点击Generate,生成最后的makefile文件。

开始编译

进入openwrt-mipsel文件夹,输入make -j8开始编译,编译过程中会看到各种花花绿绿的信息输出,不出意外的话大概需要编译十分钟。

编译过程中出现过 virtual memory exhausted: Cannot allocate memory 错误,解决方法是将虚拟机内存从1GB扩大到4GB或以上。

编译完成以后我们就可以安装刚编译好的库了。

Last updated