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

时间:2015-06-29 11:18:55

标签: c++ qt gcc mingw mingw32

我创建了简单的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:\Users\juriy\test\release\test.exe...
The program has unexpectedly finished.
C:\Users\juriy\test\release\test.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,但由于缺少cc1plus选项-fno-keep-inline-dllexport而被滥用。 请帮助理解工具的依赖关系并运行应用程序。

gdb是否正确配置为i686-pc-mingw32,如上所述?我的电脑中有两种环境Cygwin和本机Windows。并且i686-pc-ming32中的C:\QtSDK\mingw\bin名称与ar.exe名称相同,但c++filt.exei686-*-mingw32-*等简单名称等。Имя сбойного приложения: test.exe, версия: 0.0.0.0, отметка времени: 0x55912535 Имя сбойного модуля: QtCored4.dll, версия: 4.8.6.0, отметка времени 0x00000000 Код исключения: 0xc0000005 Смещение ошибки: 0x00106acf Идентификатор сбойного процесса: 0x1340 Время запуска сбойного приложения: 0x01d0b26aab6adef8 Путь сбойного приложения: C:\Users\juriy\test\debug\test.exe Путь сбойного модуля: C:\Qt\4.8.6\bin\QtCored4.dll Код отчета: ec353438-1e5d-11e5-b20d-f46d04d35ed7 之类的表格在Cygwin env中具有程序。

编辑:(ЗаписивжурналесообщенийWindows)

//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();
}

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

object Ch4 {

        def main(args: Array[String]) {
      println("Hello, world!")
      val x = sortMap()
      println(x)
    }                                             //> main: (args: Array[String])Unit

    def sortMap ( ) {
        val scores = scala.collection.immutable.SortedMap ( "Alice" -> 10, "Fred" -> 7, "Bob" -> 3)
        return scores
    }                                             //> sortMap: ()Unit
}  

1 个答案:

答案 0 :(得分:0)

使用与构建库相同版本的编译器非常重要。 Here有关用于构建qt库的版本的信息。一些有用的网站跟随我做出此决定:qt centre forumanother one