在linux上交叉编译opencv之前需要交叉编译的依赖库

您所在的位置:网站首页 交叉编译依赖的库也必须交叉编译吗为什么 在linux上交叉编译opencv之前需要交叉编译的依赖库

在linux上交叉编译opencv之前需要交叉编译的依赖库

#在linux上交叉编译opencv之前需要交叉编译的依赖库| 来源: 网络整理| 查看: 265

我在后面使用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都最好去查看一下是不是用了自己定义的交叉编译器



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3