opencv+ffmpeg交叉编译

环境:

ubuntu20.04  opencv=3.4.12  ffmpeg=4.2.*

安装交叉编译链,

        如x3m的交叉编译链aarch64-linux-gnu- 安装见链接:https://developer.horizon.ai/forumDetail/112555549341653662

        rk3399的交叉编译链aarch64-linux-gnu- 安装:

git clone https://github.com/rockchip-toybrick/linux-x86.git -b master 

       RK1808  rk3399平台,使用aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu 

  RV1109 RV1126 平台,使用arm/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/

        将相应的交叉编译链*/bin 路径加入到环境变量中,

        如: sudo gedit ~/.bashrc

                export PATH=$PATH:{自己的路径}/.../arm/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin

                source ~/.bashrc

        注:依赖包都安装在/home/gz/opencv_x3m中

依赖库:

Libx264: 下载地址 x264, the best H.264/AVC encoder - VideoLANhttp://www.videolan.org/developers/x264.html

Libz:下载地址 LIBPNG: PNG reference library - Browse /zlib at SourceForge.netReference library for supporting the Portable Network Graphics (PNG) format. https://sourceforge.net/projects/libpng/files/zlib

Libxvid: 下载地址 https://labs.xvid.com/source/icon-default.png?t=N2N8https://labs.xvid.com/source/

Ffmpeg: 下载地址 Download FFmpeghttp://ffmpeg.org/download.html

一、安装 依赖项

sudo apt-get install pkg-config  libgtk2.0-dev  libavcodec-dev libavformat-dev libswscale-dev

 二、交叉编译Libz

        将下载的Libz压缩包,解压:

        tar -xvf 压缩包名

        cd {自己的路径}/zlib-1.2.11     #这里是1.2.11版本的zlib

        ./configure --prefix=/home/gz/opencv_x3m --shared #prefix参数指定了临时安装目录

配置完成后会生成makefile文件,需要对makefile文件进行修改,适配交叉编译工具链。

        gedit Makefile       #用编辑器打开Makefile文件并进行以下对应部分的修改
        CC = aarch64-linux-gnu-gcc       #交叉编译工具链
        AR = aarch64-linux-gnu-ar
        RANLIB = aarch64-linux-gnu-ranlib
        LDSHARED = aarch64-linux-gnu-gcc -shared -wl, -soname,libz.so.1,--version-script,zlib.map

修改完成后,保存,下一步进行编译和安装:

        make 

        make install

三、交叉编译libx264

        将下载的libx264压缩包,解压:

        tar -xvf 压缩包名

        cd {自己的路径}/x264_master     #按自己的实际路径来即可

        CC=aarch64-linux-gnu-gcc ./configure --enable-shared --host=aarch64-linux-gnu --disable-asm --prefix=/home/gz/opencv_x3m

        make

        make install

四、交叉编译libxvid     

        将下载的libxvid 压缩包,解压:

        tar -xvf 压缩包名

        cd {自己的路径}/xvidcore     #按自己的实际路径来即可

        cd build/generic  #切换到编译脚本所在的目录

        /configure --prefix=/home/gz/opencv_x3m --host=aarch64-linux-gnu-gcc  --disable-assembly

        make

        make install

五、交叉编译ffmpeg  

        将下载的ffmpeg压缩包,解压:

        tar -xvf 压缩包名

        cd {自己的路径}/ffmpeg       #按自己的实际路径来即可

        ./configure --prefix=/home/gz/opencv_x3m --enable-shared --disable-static --enable-gpl --enable-cross-compile --arch=arm64 --disable-stripping --target-os=linux --enable-libx264 --enable-libxvid --cc=aarch64-linux-gnu-gcc --enable-swscale --extra-cflags=-I/home/gz/opencv_x3m/include/ --extra-ldflags=-L/home/gz/opencv_x3m/lib/

        注意:

                最后两句是前面三个依赖库的安装目录,如果不加上可能会报libx264 not found错误;

                如果是地平线的编译链后面还得加上,--extra-libs="-lpthread -ldl -lm"

                如果是arm-linux-gnueabi-gcc的编译链,--arch=arm64 要改为 --arch=arm

        make

        make install

六、交叉编译opencv

         1、设置工具链toolchain.cmake

                 在用cmake编译之前首先要构建工具链cmake文件,在终端执行:

                cd {自己的路径}/opencv-3.4.12/

                mkdir arm-build

                cd ./arm-build

                gedit toolchain.cmake

               在打开的toolchain.cmake文件中添加以下内容:

                set( CMAKE_SYSTEM_NAME Linux )
 
                set( CMAKE_SYSTEM_PROCESSOR arm64 )
 
                set( CMAKE_C_COMPILER aarch64-linux-gnu-gcc )
 
                set( CMAKE_CXX_COMPILER aarch64-linux-gnu-g++ )
 
                set( CMAKE_FIND_ROOT_PATH "/home/gz/opencv_x3m" )  #这里要和上面编译安装的目录对应
 
                set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER )
 
                set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY )
 
                set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )

                set(CMAKE_C_FLAGS -Wl,-rpath-link=/home/gz/opencv_x3m/lib)

                set(CMAKE_CXX_FLAGS -Wl,-rpath-link=/home/gz/opencv_x3m/lib)

                保存关闭后,在终端执行:

                cmake -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake ../

                完成后,打印信息中,FFMPEG对应部分都显示为no......

                 注:aarch64的编译器 CMAKE_SYSTEM_PROCESSOR 设为arm64或aarch64

                        arm的编译器 CMAKE_SYSTEM_PROCESSOR 设为arm

        2、cmake-gui

                如果没有安装cmake-gui,则sudo apt-get install cmake  cmake-qt-gui

                cmake的使用请上网查找,配置好后,在cmake-gui界面中,点击Add_Entry,添加PKG-CONFIG支持项,OPENCV_ENABLE_PKG_CONFIG 并设为ture

             

                去掉 WITH_CUDA

                去掉 WITH_GTK

                去掉 WITH_1394

                去掉 WITH_GSTREAMER

                点击Advanced ,在CMAKE_EXE_LINKER_FLAGS 选项中设为-lpthread -lrt -ldl -lm

               CMAKE_INSTALL_PREFIX 设置为/home/gz/opencv_x3m

                点击Configure,查看FFMPEG对应部分是否yes,

                        如果为no, 添加环境变量,

                        sudo gedit /etc/profile

                        export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/home/gz/opencv_x3m/lib

/pkgconfig

                         source /etc/profile

                再点击configure,直到FFMPEG对应部分为yes(这一块需要多尝试,我根据别人的文档,改过源码,还是没有用,后面莫名其妙的就好了,没去探查具体原因,建议多尝试几次,或者改一个设置就configure一次)

                依次点击Configure和Generate,生成makefile文件

               
        3、 编译opencv

                make

                make install

        如果是opencv3.4.12的版本,编译过程中,应该不会出错,如果是其他版本的opencv,编译过程中的报错信息,网上都有解决方法,请参考网上的解决方法!

        至此,opencv+ffmpeg的交叉编译已完成,将/home/gz/opencv_x3m整个文件夹放入板端,添加环境变量PATH和LD_LIBRARY_PATH即可使用

参考博客:arm平台的opencv+ffmpeg交叉编译_ffmpeg交叉编译arm_超级乐乐gogogo的博客-CSDN博客

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值