填坑记录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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章