一:准备工作
项目 | 版本号 | 链接 |
操作系统 | Ubuntu 16.04 | |
OpenCV | 2.4.13 3.2.0 | opencv-2.4.13.zip |
FFmpeg | 3.1.4 | ffmpeg-3.1.4.tar.bz2 |
x264 | 20161020 | x264-snapshot-20161019-2245-stable.tar.bz2 |
libjpeg | 9.0.0 | jpegsrc.v9.tar.gz |
libpng | 1.6.25 | libpng-1.6.25.tar.gz |
xvidcore | 1.3.4 | xvidcore-1.3.4.tar.gz |
1.1 安装依赖库:
因为要在zedboard上运行,所以安装xilinx的交叉编译工具,可以从github上下载也可以从这里下载我用的,因为这个工具是32位系统设计的,64位系统需要先安装部分32位的库
sudo apt-get install libc6:i386 libx11-6:i386 libasound2:i386 libatk1.0-0:i386 libcairo2:i386 libcups2:i386 libdbus-glib-1-2:i386 libgconf-2-4:i386 libgdk-pixbuf2.0-0:i386 libgtk-3-0:i386 libice6:i386 libncurses5:i386 libsm6:i386 liborbit2:i386 libudev1:i386 libusb-0.1-4:i386 libstdc++6:i386 libxt6:i386 libxtst6:i386 libgnomeui-0:i386 libusb-1.0-0-dev:i386 libcanberra-gtk-module:i386 gtk2-engines-murrine:i386
sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0 libgtk2.0-0:i386
然后将dash更改为bash
sudo dpkg-reconfigure dash
在弹出的对话框中选择NO,将dash更改为bash,然后修改下安装程序的权限
1.2:设置环境变量:
export ARCH=arm
export CROSS_COMPILE=arm-xilinx-linux-gnueabi-
export PATH=/opt/Xilinx/SDK/2016.4/gnu/arm/lin/bin/:$PATH
export ZYNQ_CV_BUILD=/opt/openCV3
export CC=arm-xilinx-linux-gnueabi-gcc
export LDFLAGS="-L/opt/openCV3/lib"
export CPPFLAGS="-I/opt/openCV3/include"
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/openCV3/lib/pkgconfig
export LDFLAGS=-Wl,-rpath-link,/opt/openCV3/lib
二:交叉编译插件
这个以后面的依赖库编译和安装都需要首先进行配置
tar -xzvf jpegsrc.v9.tar.gz
cd jpeg-9
./configure --host=arm-xilinx-linux CC=arm-xilinx-linux-gnueabi-gcc --prefix=<dependency install path>
make
make install
可以在配置的时候指定将编译好的库安装的位置,或者使用”sudo make install”直接安装在”/usr/local/lib”里,以下安装方式类似。
可以切换到安装的文件夹下查看是否交叉编译成功
file libjpeg.so.9.0.0
如果输出信息为
libjpeg.so.9.0.0: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, not stripped
说明交叉编译成功
zlib需要预先指定CC选项
export CC=arm-xilinx-linux-gnueabi-gcc
./configure --shared --prefix=<dependency install path>
make
make install
因为libpng交叉编译需要用到zlib,所以需要在编译该库之前交叉编译好zlib
export LDFLAGS="-L/lib"
export CPPFLAGS="-I/inclue"
./configure --host=arm-xilinx-linux CC=arm-xilinx-linux-gnueabi-gcc --prefix=<dependency install path>
在编译之前,需要指定zlib的库的安装路径和头文件位置,如果是用管理员权限安装的上述路径分别为
export LDFLAGS="-L/usr/local/lib"
export CPPFLAGS="-I/usr/local/include"
tar -xvf x264-snapshot-20161019-2245-stable.tar
cd x264-snapshot-20161019-2245-stable/
./configure --host=arm-xilinx-linux --cross-prefix=arm-xilinx-linux-gnueabi- --disable-asm --enable-shared --prefix=<dependency install path>
make
make install
xvidcore的配置文件在/build/generic里
cd build/generic
./configure --host=arm-xilinx-linux-gnueabi --disable-assembly --enable-shared --prefix=<dependency install path>
make
make install
git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
cd ffmpeg
./configure --enable-shared --disable-static --cross-prefix=arm-xilinx-linux-gnueabi-
--arch=arm --target-os=linux --disable-stripping --enable-cross-compile --disable-asm
--enable-libxvid --enable-libx264 --enable-gpl
--extra-cflags=-I<dependency install path>/include --extra-ldflags=-L<dependency install path>/lib --prefix=<dependency install path>
make
make install
这里直接使用脚本
echo "/n/n===================== 1 libjpeg交叉编译 ======================="
sleep 3
tar zxvf jpegsrc.v9.tar.gz
cd jpeg-9
./configure --prefix=$ZYNQ_CV_BUILD --host=arm-xilinx-linux-gnueabi --enable-shared
make
make install
cd ..
echo "/n/n===================== 2 zlib交叉编译 ======================="
sleep 3
tar zxvf zlib-1.2.11.tar.gz
cd zlib-1.2.11/
./configure --prefix=$ZYNQ_CV_BUILD --shared
make
make install
cd ..
echo "/n/n===================== 3 libpng交叉编译 ======================="
sleep 3
tar zxvf libpng-1.6.32.tar.gz
cd libpng-1.6.32
./configure --prefix=$ZYNQ_CV_BUILD --host=arm-xilinx-linux-gnueabi --with-pkgconfigdir=$ZYNQ_CV_BUILD/lib/pkgconfig LDFLAGS=-L$ZYNQ_CV_BUILD/lib CFLAGS=-I$ZYNQ_CV_BUILD/include
make
make install
cd ..
echo "\n\n===================== 4 x264交叉编译 ======================="
sleep 3
tar jxvf x264-snapshot-20161019-2245-stable.tar.bz2
cd x264-snapshot-20161019-2245-stable
./configure --host=arm-linux --cross-prefix=arm-xilinx-linux-gnueabi- --enable-shared --prefix=$ZYNQ_CV_BUILD
make
make install
cd ..
echo "\n\n===================== 5 xvidcore交叉编译 ======================="
sleep 3
tar zxvf xvidcore-1.3.4.tar.gz
cd xvidcore/build/generic/
./configure --prefix=$ZYNQ_CV_BUILD --host=arm-xilinx-linux-gnueabi --disable-assembly --enable-shared
make
make install
cd ../../../
echo "\n\n===================== 6 FFmpeg 交叉编译 ======================="
sleep 3
tar jxvf ffmpeg-0.10.16.tar.bz2
cd ffmpeg-0.10.16
ls
./configure --prefix=$ZYNQ_CV_BUILD --enable-shared --disable-static --enable-gpl --enable-cross-compile --arch=arm --disable-stripping --target-os=linux --enable-libx264 --enable-libxvid --cc=arm-xilinx-linux-gnueabi-gcc --enable-swscale --extra-cflags=-I$ZYNQ_CV_BUILD/include --extra-ldflags=-L$ZYNQ_CV_BUILD/lib --disable-asm
make
make install
echo "\n\n===================== 第三方依赖库文件编译完成 ======================="
sleep 5
echo "\n\n======================拷贝库文件到gcc所在的文件中 ======================="
sleep 2
# cp /opt/openCV3/include/* /root/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/arm-xilinx-linux-gnueabi/include/ -R
#cp /o /root/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/arm-xilinx-linux-gnueabi/lib
sleep 5
echo "\n\n======================打包备份 ======================="
tar cvf /opt/openCV3.tar /opt/openCV3/
echo "\n\n======================接下来准备安装opencv2/3 ======================="
三:开始配置openCV
在opencv下创建build 文件夹
sudo apt-get install cmake cmake-gui
也可以安装ccmake
四:交叉编译openCv
查看一下库文件 这是open3.2的
五:使用openCV
我这里用台式机做说明,应用跟平台没关系,只需要修改opencv的路径: