我在后面使用opencv时并没有用到这里交叉编译的第三方库,opencv源代码自带第三方库文件,可以自己在cmake中配置,我现在不是很理解网上教程说的交叉编译opencv之前要交叉编译第三方库。虽然我做了无用功,但还是记录一下,以后可能会用到
参考文章1:https://blog.csdn.net/lang523493505/article/details/85236669
参考文章2:https://blog.csdn.net/kaychangeek/article/details/78550141
准备环境:
操作系统:Ubuntu 16.04.7 LTS
交叉编译器:arm-linux-gnueabihf-gcc
1、首先需要准备好opencv运行依赖的库文件,随便找个文件夹放进去
2、配置环境变量
打开这个文件
在结尾处输入你配置的环境变量
export OPENCV_3THPARTY_LIB=/usr/local/arm/opencv_3p_lib
环境变量就是OPENCV_3THPARTY_LIB,你以后可以在shell中用$OPENCV_3THPARTY_LIB代替后面的目录,后面的目录是你自己指定的,用来存放依赖库编译输出的东西,现在是个空目录
保存并退出,然后source一下你的文件
你可以使用以下命令检查你的环境变量是否设置成功
2、解压缩、编译并安装。注意这些库文件之间还有相互的依赖性,具体依赖性在官网有介绍,总之一定要按照下面的顺序安装,否则会报错
1、交叉编译libz(没有打错,就是这个名字)
解压缩:
进入解压后的文件夹,创建一个新的build文件夹,进入build文件夹,创建一个脚本文件build.sh
在脚本中输入命令
CC=arm-linux-gnueabihf-gcc ../configure --prefix=$OPENCV_3THPARTY_LIB --shared
make
make install
运行它
运行之后看一下目标路径下,应该已经有文件了
2、交叉编译yasm
解压
和上一步一样
在build.sh脚本中输入:
../configure --host=arm-linux-gnueabihf --prefix=$OPENCV_3THPARTY_LIB --enable-shared --enable-static
make
make install
配置权限,运行它
3、交叉编译xvidcore
解压
进入解压的文件夹
看到这里已经有build文件夹了,进去找makefile,它在build/generic路径下
输入以下内容:
../configure --host=arm-linux-gnueabihf --prefix=$OPENCV_3THPARTY_LIB --disable-assembly
make
sudo make install
这里重新生成了以下Makefile,注意最后安装需要加sudo获取权限
运行它
4、交叉编译libpng
参考文章:https://blog.csdn.net/weixin_42489042/article/details/83027531
先解压
libpng不需要再自己configure出makefile文件了,在scripts文件夹下已经有makefile.linux文件,直接修改它就行,如果自己configure可能会遇到找不到zlib的问题
先把它拷贝到当前路径下,重命名为Makefile
用gedit编辑它
按住crtl+f搜索zlib,找到下面的语句,修改成你自己的路径,我这里直接用环境变量
再找到prefix,把它修改成你想输出的路径
再找到CC
在shell中输入编译安装命令
make
make install
5、交叉编译x264
解压:
输入:
CC=arm-linux-gnueabihf-gcc ../configure --host=arm-linux --prefix=$OPENCV_3THPARTY_LIB --enable-shared --disable-asm
make
sudo make install
运行
6、交叉编译jpegsrc
同理,这次的脚本是
../configure --prefix=$OPENCV_3THPARTY_LIB CC=arm-linux-gnueabihf-gcc --host=arm-linux-gnueabihf
make
make install
7、交叉编译mmjpeg
同理,这次的脚本是:
../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-gnueabihf-gcc --enable-swscale --extra-ldflags=-L$OPENCV_3THPARTY_LIB/lib --extra-cflags=-I$OPENCV_3THPARTY_LIB/include
make&&make install
最后打开环境变量指定的目录,瞧一瞧
所有依赖库都在这里,随便看一个libjpeg.so.9.4.0,可以看到是32位arm属性
到这里,所有依赖已经交叉编译完成,撒花!!!
tips
交叉编译时不要一昧复制,脚本中的--perfix和--host以及定义CC都是需要按照自己的需求修改的
每次./configure之后生成的Makefile都最好去查看一下是不是用了自己定义的交叉编译器