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 的编译机制也不熟悉所以导致我难受了快一个礼拜今天终于把问题都解决了,希望给遇到同样问题的人带点帮助
这里用的是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 的编译机制也不熟悉所以导致我难受了快一个礼拜今天终于把问题都解决了,希望给遇到同样问题的人带点帮助
相关文章推荐
- vs2010配置FFMPEG SDK并编译output_example.c遇到的问题
- Ubuntu12.10 64位 + android-ndk-r9 编译ffmpeg遇到的问题
- android 编译好ffmpeg 3.0+ 后再jni中使用遇到的问题
- ffmpeg 编译时遇到的make:***[libavcodec-57.so]Errror 1问题
- 编译FFmpeg遇到的问题,放弃了
- 【android NDK及JNI】ubuntu12.10 64位 + android-ndk-r9 编译ffmpeg遇到的问题 .
- winGW下编译ffmpeg遇到的问题(转载)
- win7+MinGW编译ffmpeg遇到的问题总结
- x264和FFMPEG 编译后遇到的一些问题:UINT64_C,
- x264和FFMPEG 编译后遇到的一些问题:UINT64_C,
- buntu12.10 64位 + android-ndk-r9 编译ffmpeg遇到的问题
- 在VS2013编译FFmpeg遇到的问题
- 在用VS和Intel C++ Complier编译下面两个移植到Windows下的FFmpeg时遇到的问题
- Ubuntu13.10下编译ffmpeg遇到的问题libavcodec/x86/h264_qpel_mmx.c:1294: Error: operand type mismatch for `cmp'
- Ubuntu12.04 32位 + android-ndk-r9c 编译ffmpeg遇到的问题记录
- buntu12.10 64位 + android-ndk-r9 编译ffmpeg遇到的问题
- 编译ffmpeg文件遇到的问题以及解决方法
- 用NDK编译FFmpeg时遇到的问题
- 编译ffmpeg遇到的问题
- x264和FFMPEG 编译后遇到的一些问题:UINT64_C,