填坑記錄6-交叉編譯opencv

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

 

發佈了37 篇原創文章 · 獲贊 27 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章