c++ - 在 Qt C++ 中访问 GStreamer 库时出错 - 调试时程序因代码 0xc0000135 而兴奋

标签 c++ windows qt debugging gstreamer

我想使用 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:\Windows ; 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, &micro, &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 作为调试器。

提前致谢!

最佳答案

我在同时使用 Qt 和 Gstreamer 的项目中遇到了类似的问题。

“undefined reference to `__gxx_personality_v0'”错误的原因是来自官方站点的 Qt 和 GStreamer for windows 是使用不同的编译器构建的,并且它们的 libstdc++ 库不兼容 - 它们使用不同的异常处理方法。 事实上,GStreamer 是纯 C 库。它唯一用 C++ 编写的组件是 taglib 库。如果您将使用您的 MinGW 编译器从源代码构建这个库,然后将其替换到 GStreamer 文件夹中,那么不兼容的问题就会得到解决。 您可以在此处阅读更多详细信息:https://github.com/knowthelist/knowthelist .

关于c++ - 在 Qt C++ 中访问 GStreamer 库时出错 - 调试时程序因代码 0xc0000135 而兴奋,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31948418/

相关文章:

c++ - 如何获取 QTableWidget 列的标签值

java - C/C++ 中的跨平台兼容性(从 Java 移植项目)?

c# - 高效快速地阅读 Windows 日志

c# - PropertyGrid 滚动位置在设置时不改变

c++ - QObject 通用信号处理程序

c++ - QLibraryInfo 似乎没有加载 qt.conf

c++ - 使用 C++ 程序中的 raspistill 读取相机图像

c++ - 如何在C中使用unwrap函数和iota(复数中的 "i")?

c++ - 正在更改的 SFML TCP 数据包

windows - 无法编译 Rust 程序 : LNK1181: cannot open input file 'C:\\Program.obj'