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