c-在Windows的qt项目中包含ffmpeg会导致程序意外完成
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c-在Windows的qt项目中包含ffmpeg会导致程序意外完成,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2981字,纯文字阅读大概需要5分钟。
内容图文
![c-在Windows的qt项目中包含ffmpeg会导致程序意外完成](/upload/InfoBanner/zyjiaocheng/950/f1e49d5c44b94ec9ba76af0ddaef2fc3.jpg)
我正在尝试在Windows的qt项目中包含ffmpeg.我正在运行QT4并在32位Windows 7上使用Microsoft Visual Compiler 2010进行编译.我试图包含ffmpeg 2.8,它从zeranoe获得了dev和shared的下载.运行时,我得到以下输出:
Starting (executable path)...
The program has unexpectedly finished.
(executable path) exited with code -1073741819
我可以通过以下方式产生此输出:
ffmpeg_test.pro:
QT += core
TARGET = ffmpeg_test
INCLUDEPATH += (ffmpeg dev path)/include
LIBS += -L(ffmpeg dev path)/lib
LIBS += -lavformat
SOURCES += main.cpp
main.cpp中:
extern "C"
{
#ifndef __STDC_CONSTANT_MACROS
#define __STDC_CONSTANT_MACROS
#endif
#include <libavformat/avformat.h>
}
int main(int argc, char *argv[])
{
av_register_all();
return 0;
}
我已将ffmpeg共享库中的.dll文件放入QT将ffmpeg_test.exe放入其中的文件夹中.我也已确认使用依赖项遍历器找到它们,当它们不在该目录中时会显示一个问号,而当它们不在目录中时会显示avformat-56.dll文件路径(发现.dll文件的事实不会影响输出程序).
Dependency Walker确实表明发生了奇怪的事情,因为没有预期的功能,但是在avformat-56.dll中找到的功能看起来正确.我还在avformat.lib上运行了Dumpbin.exe / EXPORTS,它看起来也不错(如果有帮助,我可以发布输出).值得注意的是,我已经将此版本的ffmpeg包含在此计算机上的其他应用程序中,但这不是qt项目.该项目使用CMake而不是QMake生成其make文件,并使用Microsoft Visual C 2010而不是QT Creator生成.
我还在qt中包含了其他.lib / .dll对,它们没有问题.我注意到这两个对有两个区别.首先在ffmpeg-dev lib文件夹中,而不是只有.lib文件(我所有其他.lib / .dll对都是这种情况),每个库我也都有一个.def和.dll.a文件.第二个ffmpeg是c库,而我所有其他包含的库都是c.
更新3/29:
我尝试用以下两种方法替换.pro中的LIBS行:
LIBS =(ffmpeg开发路径)/lib/avformat.lib
LIBS =(ffmpeg开发路径)/lib/libavformat.dll.a
两者都给出相同的错误消息.我也尝试将以下内容添加到我的.pro文件中,也没有任何效果.
定义= __STDC_CONSTANT_MACROS
QMAKE_CXX_FLAGS = -D_STDC_CONSTANT_MACROS
另外,我尝试按照ffmpeg website的建议将#define inline __inline添加到main.cpp中.对于任何尝试的想法,将不胜感激!
更新3/31:
我试图从新的Windows构建环境重新开始,但是结果与上面的测试代码相同. (新环境能够运行一个hello world程序).
我设置此环境的过程是安装32位Windows的全新版本.从Visual Studio 2010 Express All-in-one ISO安装Visual C 2010 Express.安装Qt 4.8.6 for 32 bit windows and Visual Studio 2010.最后安装Qt Creator 2.5.2.要设置Qt Creator,我进入了tools-> options和告诉它在哪里可以找到Qt 4.8.6 qmake.我从Zeranoe下载了ffmpeg 2.8的dev和shared版本.我错过了stdint.h and inttypes,所以我下载了它们并将文件放在/ include / libavutil中.然后,我将抱怨的任何头文件更正为“ stdint.h”等.然后,我将ffmpeg-2.8-win32-shared / bin中的dll文件放到qt正在构建ffmpeg_test ffmpeg_test-build-desktop-Qt_4_8_6__4_8_6__发行/发布的文件夹中.
解决方法:
问题是ffmpeg是用MinGW compiler编译的,有时是用不同的编译器may not always be compatible编译的库.我能够通过获取MinGW编译器并为MinGW设置Qt来使测试程序正确运行.另外,我的ffmpeg版本不需要涉及stdint.h或inttypes.h的更改.这个版本的ffmpeg如何使用MSVC和cmake进行编译仍然是我的一个谜.对于前进的道路,问题是是否可以切换到MinGW编译器,或者我是否需要为MSVC编译ffmpeg.
内容总结
以上是互联网集市为您收集整理的c-在Windows的qt项目中包含ffmpeg会导致程序意外完成全部内容,希望文章能够帮你解决c-在Windows的qt项目中包含ffmpeg会导致程序意外完成所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。