基本 qt 应用程序未运行但已编译
Posted
技术标签:
【中文标题】基本 qt 应用程序未运行但已编译【英文标题】:Basic qt app doesn't run but compilied 【发布时间】:2015-06-29 11:18:54 【问题描述】:我创建了简单的 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.1
和Qt 4.8.6
的整个工具链。
我尝试了 Cygwin 软件包 make
和 MinGW binutils
,但由于缺少 cc1plus 选项 -fno-keep-inline-dllexport
而被滥用。
请帮助理解工具的依赖关系并运行应用程序。
gdb 被配置为i686-pc-mingw32
是正确的消息吗?我的 PC 中有两种环境 Cygwin 和原生 Windows。在C:\QtSDK\mingw\bin
中没有像i686-pc-ming32
这样的名称,而是像ar.exe
、c++filt.exe
等简单的名称。像i686-*-mingw32-*
这样的形式在Cygwin env 中有程序。
编辑:(Записи в журнале сообщений Windows)
Имя сбойного приложения: 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
编辑:澄清情况的一些来源。
//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 Creator 配置正确? @nnb,感谢参与,我没有尝试过,导致非常基本的应用程序运行失败。根据定义,基本应用程序是很好的工作示例 也许您的 cygwin 配置与 Qt Creator 冲突。您是否尝试使用 Qt Creator 设置来设置工具链部分并从 Qt Creator 构建它(选项构建和运行,设置编译器等)?我看到你从命令行手动运行 make .. 你也可以在 Windows 事件查看器中检查问题出了什么问题(可能只是由于错误设置工具链路径而丢失了一些库) @otopolsky ,我已经从 cygwin 卸载了 binutils 并使用 Qt Creator 构建了应用程序——没关系。我在 Windows 日志中找到了消息,请参阅编辑 异常 0xc00..5 表示访问冲突.. 我只是在猜测 - 它可能是由错误的代码引起的,也可能是由损坏的 (dll) 文件引起的。也许你可以发布一些代码来检查它是否真的正确。 【参考方案1】:使用与构建库相同的编译器版本很重要。 Here 有关用于构建 qt
库的版本的信息。跟随我做出此决定的一些有用网站:qt centre forum 和 another one。
【讨论】:
以上是关于基本 qt 应用程序未运行但已编译的主要内容,如果未能解决你的问题,请参考以下文章
QML 模块未安装错误:在嵌入式 Linux 上运行 Qt 应用程序