您的位置:首页 > 编程语言 > Qt开发

ffmpeg+qt+v4l2编译时遇到的问题

2014-10-10 19:05 225 查看
折腾了好几天觉得必须得写个博客做下笔记了顺便整理下错误:

这里用的是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

arm-linux-uclibc/bin/ld: warning: XXX.so, needed by /opt/XXX/XXX/XXX.so, not found (try using -rpath or -rpath-link)
/opt/XXX/XXX/XXX.so: undefined reference to `XXX'
/opt/XXX/XXX/XXX.so: undefined reference to `XXX'
collect2: ld returned 1 exit status
make: *** [XXX] 错误 1

本来查看了自己的lib文件夹下面 上面需要的2个.so文件都有了 可就是提示找不到 最后发现是Makefile文件中的包含路径少了一条 添加 -l(小写的L)+你的.so库的文件名(不要库名前的lib和.so) 建议最好在qt的工程文件中添加 因为qt的makefile每次编译都会重新按照工程文件的配置来重新生成makefile,这样会覆盖你修改后的makefile。

例如:-lWiFiAPI 是代表libWiFiAPI.so

上面的XXX代表相应的库文件 和 路径 生成文件

上面的错误每一个都能导致编译不通过 而且第二个错误会导致第一个错误出现,由于之前没有做过自定义动态链接库的程序编译而且QT 的编译机制也不熟悉所以导致我难受了快一个礼拜今天终于把问题都解决了,希望给遇到同样问题的人带点帮助
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息