1、首先在opencv源码中3rdparty文件中添加编译好的ffmpeg
2、编写toolchain.txt输入:
include(CMakeForceCompiler)
set(CMAKE_SYSTEM_NAME QNX)
set(CMAKE_SYSTEM_PROCESSOR "ARM")
set(CMAKE_BUILD_TYPE Release CACHE STRING "Cmake build type")
set(CMAKE_C_COMPILER c:/qnx660/host/win32/x86/usr/bin/arm-unknown-nto-qnx6.6.0eabi-gcc.exe)
set(CMAKE_CXX_COMPILER c:/qnx660/host/win32/x86/usr/bin/arm-unknown-nto-qnx6.6.0eabi-g++.exe)
set(CMAKE_AR c:/qnx660/host/win32/x86/usr/bin/arm-unknown-nto-qnx6.6.0eabi-ar.exe CACHE FILEPATH "" FORCE)
set(CMAKE_LD c:/qnx660/host/win32/x86/usr/bin/arm-unknown-nto-qnx6.6.0eabi-ld.exe)
set( CMAKE_FIND_ROOT_PATH e:/opencv_source/opencv-3.2.0/opencv-3.2.0/3rdparty/ffmpeg/install/lib )
3、使用PowerShell打开cmake-gui
填写:
选定:
4、点击configure
出现如下错误 :
解决办法:
在PowerShell中输入
export PKG_CONFIG_PATH=/e/opencv_source/opencv-3.2.0/opencv-3.2.0/3rdparty/ffmpeg/install/lib/pkgconfig
来指定ffmpeg中的库文件
但是还是会出现如下错误:
解决办法1:
因为是编译ffmpeg_test.cpp的时候出现错误,所以可以在cmake-gui中的CMAKE_CXX_FLAGS添加-std=c++11,ffmpeg_test.cpp中有三个头文件
#include <libavformat/avformat.h>
#include <libavcodec/avcodec.h>
#include <libswscale/swscale.h>
在这三个头文件里面添加#undef __cplusplus
然后在进行configure可以解决上面的错误。
但是后面make的时候出现错误,没有解决。
解决办法2:
同理因为是ffmpeg_test.cpp没有编译成功,所以将ffmpeg_test.cpp中的代码注释掉,如下所示:
#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;
#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
*/
}
int main() { test(); return 0; }
注意:将上面头文件加入的#undef __cplusplus注释掉否则make会出现错误,如下图所示
取消上图所示的两个沟
4、点击generate
5、进入build中进行make
出现如下错误:
解决办法:
将上图两个勾取消掉
出现如下错误:
解决办法:
将ffmpeg中的lib库下所有文件除了pkgconfig复制到build文件下的lib库中。
make完成。
出现如下错误:
解决办法:
在CMakeList.txt中,由于qnx的pthread在clib里,所以将OPENCV_LINKER_LIBS修改为 m c
#set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} dl m pthread rt)
set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} m c)
6、make install
还是出现上面的错误:
搞了好久没有找到实质性的方法。
但是有一个不是办法的办法,其实现在已经编译好了lib没有include,回到我们最初ffmpeg显示为NO的时候,不用去管它,进行编译会有include生成,所以将include和lib移植到开发板上能够调用opencv