在 Qt C++ 中访问 GStreamer 库时出错 - 程序在调试时被代码 0xc0000135 激发
Posted
技术标签:
【中文标题】在 Qt C++ 中访问 GStreamer 库时出错 - 程序在调试时被代码 0xc0000135 激发【英文标题】:Error accessing GStreamer Library in Qt C++ - Program excited with code 0xc0000135 when Debugging 【发布时间】:2015-08-11 17:38:01 【问题描述】:我想使用 gstreamer 库进行视频编程,我读到 Qt5.5.0 提供了对 gstreamer-1.0 的支持,这是我使用的库。我先下载了 1.0.7 版本,但出现以下错误,所以我下载了最新版本 1.5.2,我现在正在尝试使用。
我设法链接了 gstreamer 库头文件,所以我没有构建它,只是包含它的路径并访问头文件和库。无论如何,现在我有一个错误程序已意外完成。当我尝试调试它时,我在弹出窗口中收到以下错误: 在启动程序时出现代码 0xc0000135。
关于一般消息:
:1:24: 只读版本 1.1 部分。 :10:5: 只需要 Component 和 ModuleApi 对象定义。
我阅读了许多与此错误相关的问题,但没有任何帮助,我认为这是 gstreamer 库的错误,但也可能是编译器/调试器错误,正如我在某些线程中看到的那样。
我检查了我的 PATH 变量,因为我也无法在 Qt 之外运行程序(通过尝试在构建的调试文件夹中运行 .exe) - 错误:库 Qt5Cored.dll 丢失 - 我找到了这个路径:
C:\Qt\Qt5.5.0_android\5.5\mingw492_32\lib; C:\Users\user\Documents\build-GStreamer-test5-Desktop_Qt_5_5_0_MinGW_32bit-Debug; C:\Qt\Qt5.5.0_Android\5.5\mingw492_32\bin; C:\Qt\Qt5.5.0_Android\Tools\mingw492_32\bin; C:\Windows\system32; C:\视窗; C:\Windows\System32\Wbem; C:\Windows\System32\WindowsPowerShell\v1.0; C:\Program Files\Skype\Phone\ (我不知道为什么包含这个,但我检查时它就在那里)
我对 Qt 比较陌生,以前从未遇到过这个错误。如果您需要任何代码:
.pro:
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = GStreamer-test5
TEMPLATE = app
SOURCES += main.cpp
mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui
INCLUDEPATH += C:/gstreamer/1.0/x86/include/gstreamer-1.0
C:/gstreamer/1.0/x86/lib/gstreamer-1.0/include
C:/gstreamer/1.0/x86/include/glib-2.0
C:/gstreamer/1.0/x86/lib/glib-2.0/include
LIBS += -L C:/gstreamer/1.0/x86/lib/ -lgstreamer-1.0
和.main:
#include "mainwindow.h"
#include <QApplication>
#include <QDebug>
#include <stdio.h>
#include "gst/gst.h"
void *__gxx_personality_v0;
int main(int argc, char *argv[])
QApplication a(argc, argv);
MainWindow w;
w.show();
const gchar *nano_str;
guint major, minor, micro, nano;
gst_init (&argc, &argv);
gst_version (&major, &minor, µ, &nano);
if (nano == 1)
nano_str = "(CVS)";
else if (nano == 2)
nano_str = "(Prerelease)";
else
nano_str = "";
// printf ("This program is linked against GStreamer %d.%d.%d %s\n", major, minor, micro, nano_str);
qDebug() << "This program is linked against GStreamer %d.%d.%d %s\n", major, minor, micro, nano_str ;
return a.exec();
首先,我遇到了错误: undefined reference to `__gxx_personality_v0' ,但通过添加 *void __gxx_personality_v0; 来修复它,虽然我不知道它是什么。
我已经为这个问题苦苦挣扎了三天。任何帮助表示赞赏,或者如果您可以通过一些代码帮助我了解如何访问头文件和库,或者调试器选项/PATH 的配置必须如何。
我在 Android 上使用 Qt5.5.0,在 Windows 上我使用 MinGW 4.9.2 32 位 编译器和 GNU gdb 7.8 作为调试器。
提前致谢!
【问题讨论】:
添加void *__gxx_personality_v0;
就像在断腿上贴创可贴——你走路时仍然会摔倒。该符号是编译器标准库的一部分,您必须链接到它。否则它几乎肯定会在启动过程中崩溃。
那么这种情况我该怎么办,我的意思是断腿可以修复,还是我应该继续使用创可贴? :)
【参考方案1】:
我在同时使用 Qt 和 Gstreamer 的项目中遇到了类似的问题。
“undefined reference to `__gxx_personality_v0'”错误的原因是来自官方网站的 Qt 和 GStreamer for windows 是使用不同的编译器构建的,并且它们的 libstdc++ 库不兼容 - 它们使用不同的异常处理方法。 实际上,GStreamer 是纯 C 库。它唯一用 C++ 编写的组件是 taglib 库。如果你使用你的 MinGW 编译器从源代码构建这个库,然后在 GStreamer 文件夹中替换它,不兼容的问题将得到解决。 更详细的信息你可以在这里阅读:https://github.com/knowthelist/knowthelist。
【讨论】:
【参考方案2】:我设法解决了上述问题。我必须在 .exe 文件夹(build-debug 文件夹)中包含所有包含的 dll,所以我尝试从那里运行 .exe,而不是从 Qt 运行它,并且缺少 dll 的一些错误给了我的名称dll。我在我的库 bin 文件夹中找到了一些并下载了一些,现在一切似乎都很好:)
【讨论】:
以上是关于在 Qt C++ 中访问 GStreamer 库时出错 - 程序在调试时被代码 0xc0000135 激发的主要内容,如果未能解决你的问题,请参考以下文章
使用 GstDiscoverer (GStreamer) 的分段错误
如何在 Qt5.5 中使用 gstreamer1.0 而不是 0.10?
如何将 gstreamer 1.0 视频元素添加到 qt5 应用程序