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目录
确认编译出来的库的平台,使用file命令:“file libjpeg.so.9.2.0”
可以看到是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:
选择编译类型,点击NEXT:
配置项目,System填写linux,填写交叉编译器gcc和g++的绝对路径,Target Root填写
前一步编译好的依赖项的目录,点击Finish:
如果全部配置正确,可以看到输出框里找到了我们之前编译的依赖项的目录:
确认准确无误后可以开始配置我们需要的模块了:
如上图,去掉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:
在build目录下打开CMakeCache.txt文件,找到252行附近CMAKE_EXE_LINKER_FLAGS,在其后面加上-lpthread -lrt -ldl链接属性:
找到:
CMAKE_CXX_FLAGS
CMAKE_C_FLAGS
加上
-Wl,-rpath-link=/usr/local/arm/opencv_depend/lib
在build目录下执行:
cmake ../
make
编译完成:
安装到/usr/local/arm/opencv3.3
sudo make install
查看我们安装好的库:
同样,使用file命令查看编译出来的平台“file libopencv_core.so.3.3.0”
ARM平台,没有问题
5. 编译好的内容拷贝到开发板的文件系统
也就是将我们前面编译好的“/usr/local/arm/opencv_depend”“/usr/local/arm/opencv3.3”相关文件全部拷贝到开发板文件系统相同的位置。
查看开发板的目录:
OK,大功告成,OpenCV3.3以及全部移植到iTop4412的开发板上了。可以写一个简单的测试程序试一下了。