天天看点

交叉编译OpenCV3.3 - iTop4412平台OpenCV3.3的交叉编译-iTop4412平台

OpenCV3.3的交叉编译-iTop4412平台

编译环境

ubuntu版本:Ubuntu 18.04.1 LTS

交叉编译器:arm-2012.09,gcc版本4.7.2

目标板 :iTop4412

1. 安装cmake gui

如果你的机器上没有cmake-gui,输入下方命令安装。需要注意ubuntu的版本,如果低于12可能apt‐get安装的cmke gui版本过低,后期编译OpenCV3.3可能会出错。

# 安装cmake‐gui
sudo apt‐get install cmake‐gui
# 测试安装成功,如果可以打开gui界面则可以认安装成功
# 低版本的ubuntu用root用户运行可能会报错,可以用普通用户试试
# 打开cmake gui测试是否安装成功
cmake‐gui
           

2. 交叉编译器替换

iTop4412提供的交叉编译器为2009q3.tar.bz2,gcc4.4.1,为了编译OpenCV3.3,我们替换为arm-2012.09版本,gcc4.7.1。替换方法后面再出一个博客。

包名arm-2012.09-64-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2

下载地址:https://download.csdn.net/download/xiaokang_rays/11980477

3. OpenCV3.3依赖项的编译安装

在电脑上编译OpenCV3.3时,常用的库以及存在于Ubuntu中,或者有一些会自动联网安装,但到了嵌入式平台,则没有那么方便了。所有的依赖库都需要自己手动编译为ARM平台的,下面开始介绍。

我们使用OpenCV,一般编译以下库就够了,包含我所使用的包名:

zlib :zlib-1.2.8.tar.gz

libjepg :jpegsrc.v9b.tar.gz

libpng :libpng-1.5.14.tar.gz

yasm :yasm-1.3.0.tar.gz

x264 :last_x264.tar.bz2

xvidcore :xvidcore_1.3.3.orig.tar.gz

ffmpeg :ffmpeg-3.4.tar.bz2

zlib官网:http://www.zlib.net/

libjpeg下载地址:http://www.ijg.org/files/

libpng下载地址:http://www.libpng.org/pub/png/libpng.html

yasm下载地址:http://yasm.tortall.net/Download.html

x264下载地址:http://www.videolan.org/developers/x264.html

libxvid下载地址:http://ftp.br.debian.org/debian-multimedia/pool/main/x/xvidcore/

ffmpeg下载地址:http://ffmpeg.org/download.html

下载地址我打包了一下:https://download.csdn.net/download/xiaokang_rays/11980786

3.1 交叉编译libz

#解压后
cd zlib‐1.2.8
# prefix是make install的安装目录
./configure ‐prefix=/usr/local/arm/opencv_depend ‐shared
# 修改Makefile
vim Makefile
           

其中

CC=arm-none-linux-gnueabi-gcc

AR=arm-none-linux-gnueabi-ar

LDSHARED=arm-none-linux-gnueabi-gcc…(只修改前缀)

RANLIB=arm-none-linux-gnueabi-ranlib

1 # 编译安装
2 make
3 sudo make install
           

3.2 交叉编译libjpeg

后面的编译注意安装路径prefix选项,修改为自己的路径

cd jpeg‐9b
./configure ‐host=arm‐none‐linux‐gnueabi ‐prefix=/usr/local/arm/opencv_de
pend ‐enable‐shared ‐enable‐static
make
sudo make install
           

3.3 交叉编译libpng

cd libpng‐1.5.14
./configure ‐host=arm‐none‐linux‐gnueabi ‐prefix=/usr/local/arm/opencv_de
pend ‐enable‐shared ‐enable‐static CC=arm‐none‐linux‐gnueabi‐gcc LIBS=‐L/us
r/local/arm/opencv_depend/lib CPPFLAGS=‐I/usr/local/arm/opencv_depend/inclu
de
make
sudo make install
           

3.4 交叉编译yasm

cd yasm‐1.3.0
./configure ‐host=arm‐none‐linux‐gnueabi ‐prefix=/usr/local/arm/opencv_de
pend ‐enable‐shared ‐enable‐static
make
sudo make install
           

3.5 交叉编译libx264

cd x264‐snapshot‐20171114‐2245
CC=arm‐none‐linux‐gnueabi‐gcc ./configure ‐‐enable‐shared ‐‐host=arm‐none
‐linux‐gnueabi ‐‐disable‐asm ‐‐prefix=/usr/local/arm/opencv_depend
make
sudo make install
           

3.6 交叉编译libxvid

cd xvidcore‐1.3.3/build/generic
./configure ‐host=arm‐none‐linux‐gnueabi ‐prefix=/usr/local/arm/opencv_de
pend ‐disable‐assembly
make
sudo make install
           

3.7 交叉编译ffmpeg

cd ffmpeg‐3.4
./configure ‐‐prefix=/usr/local/arm/opencv_depend ‐‐enable‐shared ‐‐disab
le‐static ‐‐enable‐gpl ‐‐enable‐cross‐compile ‐‐arch=arm ‐‐disable‐strippin
g ‐‐target‐os=linux ‐‐enable‐libx264 ‐‐enable‐libxvid ‐‐cc=arm‐none‐linux‐g
nueabi‐gcc ‐‐enable‐swscale ‐‐extra‐ldflags=‐L/usr/local/arm/opencv_depend/
lib ‐‐extra‐cflags=‐I/usr/local/arm/opencv_depend/include
make
sudo make install
           

编译完成

依赖项全部编译完成,查看lib目录

交叉编译OpenCV3.3 - iTop4412平台OpenCV3.3的交叉编译-iTop4412平台

确认编译出来的库的平台,使用file命令:“file libjpeg.so.9.2.0”

交叉编译OpenCV3.3 - iTop4412平台OpenCV3.3的交叉编译-iTop4412平台

可以看到是ARM版本,没有错。

4. 编译opencv3.3

下面进入我们的主题,交叉编译OpenCV3.3。

下载地址:

https://github.com/opencv/opencv/archive/3.3.0.zip

目录说明:

交叉编译工具链所在目录 /usr/local/arm/arm-2012.09

opencv编译好的依赖项:/usr/local/arm/opencv_depend

opencv源码目录/home/rays/Files/opencv/arm_opencv-3.3.0

opencv构建目录 /home/rays/Files/opencv/arm_opencv-3.3.0/build

opencv安装目录 /usr/local/arm/opencv3.3

使用cmkae-gui生成Makefile

# 运行cmake‐gui
cmake‐gui
           

填写源码目录和构建目录,点击Configure:

交叉编译OpenCV3.3 - iTop4412平台OpenCV3.3的交叉编译-iTop4412平台

选择编译类型,点击NEXT:

交叉编译OpenCV3.3 - iTop4412平台OpenCV3.3的交叉编译-iTop4412平台

配置项目,System填写linux,填写交叉编译器gcc和g++的绝对路径,Target Root填写

前一步编译好的依赖项的目录,点击Finish:

交叉编译OpenCV3.3 - iTop4412平台OpenCV3.3的交叉编译-iTop4412平台

如果全部配置正确,可以看到输出框里找到了我们之前编译的依赖项的目录:

交叉编译OpenCV3.3 - iTop4412平台OpenCV3.3的交叉编译-iTop4412平台

确认准确无误后可以开始配置我们需要的模块了:

交叉编译OpenCV3.3 - iTop4412平台OpenCV3.3的交叉编译-iTop4412平台

如上图,去掉WITH_TIFF的勾选,同样的,去掉以下几项的勾选:

WITH_TIFF

WITH_GTK

WITH_CUDA

WITH_OPENCL

WITH_OPENEXR

WITH_1394

CMAKE_BUILD_TYPE,将这个键的值改成Release

CMAKE_INSTALL_PREFIX,将这个键的值改成最后我们需要安装opencv的目录 /usr/local/arm/opencv3.3

点击Generate:

交叉编译OpenCV3.3 - iTop4412平台OpenCV3.3的交叉编译-iTop4412平台

在build目录下打开CMakeCache.txt文件,找到252行附近CMAKE_EXE_LINKER_FLAGS,在其后面加上-lpthread -lrt -ldl链接属性:

交叉编译OpenCV3.3 - iTop4412平台OpenCV3.3的交叉编译-iTop4412平台

找到:

CMAKE_CXX_FLAGS
CMAKE_C_FLAGS
           

加上

-Wl,-rpath-link=/usr/local/arm/opencv_depend/lib
           
交叉编译OpenCV3.3 - iTop4412平台OpenCV3.3的交叉编译-iTop4412平台

在build目录下执行:

cmake ../
make
           

编译完成:

交叉编译OpenCV3.3 - iTop4412平台OpenCV3.3的交叉编译-iTop4412平台

安装到/usr/local/arm/opencv3.3

查看我们安装好的库:

交叉编译OpenCV3.3 - iTop4412平台OpenCV3.3的交叉编译-iTop4412平台

同样,使用file命令查看编译出来的平台“file libopencv_core.so.3.3.0”

交叉编译OpenCV3.3 - iTop4412平台OpenCV3.3的交叉编译-iTop4412平台

ARM平台,没有问题

5. 编译好的内容拷贝到开发板的文件系统

也就是将我们前面编译好的“/usr/local/arm/opencv_depend”“/usr/local/arm/opencv3.3”相关文件全部拷贝到开发板文件系统相同的位置。

查看开发板的目录:

交叉编译OpenCV3.3 - iTop4412平台OpenCV3.3的交叉编译-iTop4412平台

OK,大功告成,OpenCV3.3以及全部移植到iTop4412的开发板上了。可以写一个简单的测试程序试一下了。