在上一篇里面,我们已经下载好了opencv源码,安装好了arm-linux交叉编译器和cmake,接下来就是要利用交叉编译器来编译opencv源码了,但是在这之前,我们要先交叉编译opencv的第三方依赖库。(注:为了方便安装,建议切换到root用户下)。
解压opencv源码
在/opt下创建目录arm,将opencv源码放到/opt/arm下,进入/opt/arm目录下,然后解压源码。
unzip opencv-3.2.0.zip
这时候目录下会多出一个opencv-3.2.0的目录,进入该目录。然后在该目录下创建2个文件夹build(用于存放配置的中间文件)和output(用于存放编译好的opencv输出文件)。
cd opencv-3.2.0
mkdir build output
交叉编译opencv的第三方依赖库
说明:opencv的源代码依赖很多第三方库,所以也要对这些第三方库进行交叉编译。这些第三方库如下一一列举,可以到各自的官网下载,也可以从这里(传送门)下载我打包好的。下载解压后会发现这些第三方库的源码,如下图:
然后将这些库拷贝到一个路径下,对他们一一的进行解压缩,解压缩后如下图所示:(注:解压.tart.gz使用命令tar -zxvf xxx.tar.gz,解压.tar.bz2使用命令tar -jxvf xxx.tar.bz2,解压.tar.xz先用xz -d xxx.tar.xz,这时候会输出对应的.tar文件,再用tar -xvf xxx.tar解压即可。)
注:我们要将这些第三方库交叉编译成动态或者静态库,编译完成后放在那里呢,我们在编译的时候需要用--prefix=指定路径,所以为了方便起见,这个路径可能太长。所以我们将其设置成环境变量。比如我决定将这些第三方交叉编译输出的结果放在交叉编译器下面的一个文件夹。所以在/etc/profile或者/root/.bashrc或者/etc/bash.barhrc文件下的最后一行添加:
export OPENCV_3THPARTY_LIB=/usr/local/arm/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/
然后source该文件,验证是否添加成功,在命令行下输入echo $OPENCV_3THPARTY_LIB看是否有刚才添加的路径即可。
1、交叉编译libz
cd zlib-1.2.8
CC=arm-linux-gcc ./configure --prefix=$OPENCV_3THPARTY_LIB --shared
打开Makefile,vim Makefile,然后将AR=ar改成AR=arm-linux-ar,RANLIB改成arm-linux-ranlib。
make
make install
2、交叉编译libjpeg
cd jpeg-9b
./configure --host=arm-linux --prefix=$OPENCV_3THPARTY_LIB --enable-shared --enable-static
make
make install
3、交叉编译libpng
cd libpng-1.6.32
./configure --host=arm-linux --prefix=$OPENCV_3THPARTY_LIB --enable-shared --enable-static
make
make install
4、交叉编译yasm
cd yasm-1.3.0
CC=arm-linux-gcc ./configure --host=arm-linux --prefix=$OPENCV_3THPARTY_LIB --enable-shared --disable-asm
make
make install
5、交叉编译libx264
cd x264-snapshot-20171114-2245
CC=arm-linux-gcc ./configure --host=arm-linux --prefix=$OPENCV_3THPARTY_LIB --enable-shared --disable-asm
make
make install
6、交叉编译libxvid
cd xvidcore-1.3.3
cd build/generic
./configure --host=arm-linux --prefix=$OPENCV_3THPARTY_LIB --disable-assembly
make
make install
7、交叉编译ffmpeg
cd ffmpeg-3.4
./configure --prefix=$OPENCV_3THPARTY_LIB --enable-shared --disable-static --enable-gpl --enable-cross-compile --arch=arm --disable-stripping --target-os=linux --enable-libx264 --enable-libxvid --cc=arm-linux-gcc --enable-swscale --extra-ldflags=-L$OPENCV_3THPARTY_LIB/lib --extra-cflags=-I$OPENCV_3THPARTY_LIB/include
make
make install
到此,opencv依赖的第三方库交叉编译完成,当然如果你还要用到其他的opencv模块,也要交叉编译对应的第三方库,比如TIFF。