交叉编译器: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中取消一个勾

 

 

 

 

 

 

 

 

 


版权声明:本文为zk_ken原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/zk_ken/article/details/102856784