交叉编译器:arm-unknown-nto-qnx6.6.0eabi-gcc.exe
相关依赖:
x264-snapshot
xvidcore
相关依赖库下载地址:
xvidcore:http://ftp.br.debian.org/debian-multimedia/pool/main/x/xvidcore/
x264-snapshot:http://download.videolan.org/pub/videolan/x264/snapshots/
编译 x264
指令:
CC=arm-unknown-nto-qnx6.6.0eabi-gcc.exe ./configure --enable-shared --host=arm-unknown-nto-qnx6.6.0eabi --disable-asm --prefix=/e/opencv_source/opencv-4.1.2/x264-snapshot-20170415-2245/install --cross-prefix=arm-unknown-nto-qnx6.6.0eabi-
坑1:
填坑:使用管理权限打开powershell
坑2:
填坑:
找到x264文件夹下的makefile文件并打开,发现
将上图中的-s去掉
编译 xvidcore
进入xvidcore,并cd到\build\generic
指令:
./configure --prefix=/e/opencv_source/opencv-4.1.2/xvidcore/build/generic/install --host=arm-unknown-nto-qnx6.6.0eabi --disable-assembly
坑1:
此坑的意思是复制的时候没有找到libxvidcore.so.4.3文件
填坑:
在./install/lib中找到libxvidcore.so.4.3文件并将文件复制到generic目录下
编译完成。
编译ffmpeg
- 在ffmpeg文件中新建一个install文件
- 在install文件中新建一个lib和include文件
- 将x264和xvidcore文件中编译好的lib和include中的文件拷贝到ffmpeg上面新建的对应文件中
指令:
./configure --prefix=/e/opencv_source/opencv-4.1.2/ffmpeg-4.2.1/install --enable-shared --disable-static --enable-gpl --enable-cross-compile --arch=arm --disable-stripping --target-os=qnx --enable-libx264 --enable-libxvid --cc=arm-unknown-nto-qnx6.6.0eabi-gcc.exe --enable-swscale --extra-ldflags=-L/e/opencv_source/opencv-4.1.2/ffmpeg-4.2.1/install/lib --extra-cflags=-I/e/opencv_source/opencv-4.1.2/ffmpeg-4.2.1/install/include
坑1:
填坑:
见:https://blog.csdn.net/zk_ken/article/details/102706047
编译opencv:
打开powershell,输入指令:
export PKG_CONFIG_PATH=/e/opencv_source/opencv-4.1.2/ffmpeg-4.2.1/install/lib/pkgconfig
打开cmake-gui.exe
新建一个toolchain.txt文件,见https://blog.csdn.net/zk_ken/article/details/102802291
点击configure
坑1:
填坑:
改变上面的指令。我用的ffmpeg2.7.7+opencv3.2版本的是使用上面那个指令 但是现在用的是ffmpeg4.2.1+opencv4.1.2所以: 打开powershell,输入指令: export PKG_CONFIG_LIBDIR=/e/opencv_source/opencv-4.1.2/ffmpeg-4.2.1/install/lib/pkgconfig
坑2:
此时ffmpeg里面的文件已经编译成功,但是ffmpeg显示NO。
填坑:
主要原因是./cmake/checks下的ffmpeg_test.cpp编译不成功,将里面的代码注释掉
详情见:
#define __STDC_CONSTANT_MACROS #include <stdlib.h> /* extern "C" { #include <libavformat/avformat.h> #include <libavcodec/avcodec.h> #include <libswscale/swscale.h> } #define CALC_FFMPEG_VERSION(a,b,c) ( a<<16 | b<<8 | c ) */ static void test() { /* AVFormatContext* c = 0; AVCodec* avcodec = 0; AVFrame* frame = 0; (void)avcodec; (void)frame; #if LIBAVFORMAT_BUILD >= CALC_FFMPEG_VERSION(52, 111, 0) int err = avformat_open_input(&c, "", NULL, NULL); #else int err = av_open_input_file(&c, "", NULL, 0, NULL); #endif (void)err; */ } int main() { test(); return 0; }
这样ffmpeg显示为yes
坑3:
填坑:
在cmake-gui中取消如下两个勾
坑4:
填坑:
与上面坑3差不多,在cmake中取消一个勾