折腾了好几天觉得必须得写个博客做下笔记了顺便整理下错误:
这里用的是ffmpeg-2.4.2 嵌入式qt-2.2.0 在自己写的myv4l2.cpp中调用了ffmpeg的API 结果在编译的时候报了一大堆错。
错误1:undefined reference to sws_getContext
报这类错的原因有 个
(1)没有添加相应的ffmpeg的头文件 这个最容易想到
(2)在makefile编译的依赖(LIBS 和 INCPATH)中没有添加ffmpeg的includ(头文件目录) 和lib(ffmpeg所需要的动态链接库)的路径建议最好在qt的工程文件中添加 因为qt的makefile每次编译都会重新按照工程文件的配置来重新生成makefile,这样会覆盖你修改后的makefile。
(3)在myv4l2.h中不能直接
#include <libavcodec/avcodec.h>
#include <libswscale/swscale.h>
而是要
extern “C” {
#include <libavcodec/avcodec.h>
#include <libswscale/swscale.h>
}
作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern C后,会指示编译器这部分代码按C语言的进行编译,而不是C++的
错误2: xxx1.so needed by xxx2.so
这个错误借鉴网上的解决方法 源地址: http://tlocean.blog.51cto.com/2064932/407964
上面的错误每一个都能导致编译不通过 而且第二个错误会导致第一个错误出现,由于之前没有做过自定义动态链接库的程序编译而且QT 的编译机制也不熟悉所以导致我难受了快一个礼拜今天终于把问题都解决了,希望给遇到同样问题的人带点帮助