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

折腾了好几天觉得必须得写个博客做下笔记了顺便整理下错误:


这里用的是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 的编译机制也不熟悉所以导致我难受了快一个礼拜今天终于把问题都解决了,希望给遇到同样问题的人带点帮助

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值