基本 qt 应用程序无法运行,但已编译

Basic qt app doesn't run but compilied

本文关键字:编译 运行 qt 应用程序 基本      更新时间:2023-10-16

我创建了一个简单的qt应用程序:只是一个裸露的小部件。它装配得很好,没有任何问题。组成如下:

mingw32-make -j5 -f Makefile.Release mingw32-make[1]: Entering directory C:/Users/juriy/test' g++ -c -pipe -O2 -frtti -fexceptions -mthreads -Wall -Wextra -DUNICODE -DQT_DLL -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I'../../../Qt/4.8.6/include/QtCore' -I'../../../Qt/4.8.6/include/QtGui' -I'../../../Qt/4.8.6/include' -I'../../../Qt/4.8.6/include/ActiveQt' -I'release' -I'.' -I'../../../Qt/4.8.6/mkspecs/win32-g++' -o release/main.o main.cpp

当我在QtCreator中启动应用程序时,它会像这样进行调试:

Debugging starts
Debugging has failed
Debugging has finished

没有这样的调试模式:

Starting C:Usersjuriytestreleasetest.exe...
The program has unexpectedly finished.
C:Usersjuriytestreleasetest.exe crashed

GDB:

GNU gdb 6.8
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "i686-pc-mingw32"...
BFD: BFD (GNU Binutils) 2.18.50.20080226 internal error, aborting at coffcode.h line 842 in handle_COMDAT
BFD: Please report this bug.

对于这样一个版本的Qt,我似乎使用了错误的工具。我的工具:QtSDK 1.2.1Qt 4.8.6的整个工具链。

我尝试了Cygwin包makeMinGW binutils,但由于缺少-fno-keep-inline-dllexport选项,它被滥用了。请帮助理解工具的依赖关系并运行应用程序。

如上所述,gdb被配置为i686-pc-mingw32,这是正确的消息吗?我的电脑有两个环境Cygwin和原生Windows。在C:QtSDKmingwbin中没有类似的i686-pc-ming32名称,而是简单的名称,如ar.exec++filt.exe等。类似i686-*-mingw32-*的形式在Cygwin env中有程序。

编辑:(窗户)

Имя сбойного приложения: test.exe, версия: 0.0.0.0, отметка времени: 0x55912535
Имя сбойного модуля: QtCored4.dll, версия: 4.8.6.0, отметка времени 0x00000000
Код исключения: 0xc0000005
Смещение ошибки: 0x00106acf
Идентификатор сбойного процесса: 0x1340
Время запуска сбойного приложения: 0x01d0b26aab6adef8
Путь сбойного приложения: C:Usersjuriytestdebugtest.exe
Путь сбойного модуля: C:Qt4.8.6binQtCored4.dll
Код отчета: ec353438-1e5d-11e5-b20d-f46d04d35ed7

编辑:一些来源澄清情况。

//widget.h
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
    Q_OBJECT
public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();
private:
    Ui::Widget *ui;
};
//widget.cpp
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
}
Widget::~Widget()
{
    delete ui;
}
// main.cpp
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

使用与构建库相同版本的编译器非常重要。以下是有关用于构建qt库的版本的信息。一些有用的网站跟随我做出这个决定:qt中心论坛和另一个。