0

我正在尝试在我的 win7 32 位上结合 Code::Blocks IDE 和 Qt 5.1.1。在 CB 中,我使用支持 C++0x 的 MinGW 的 g++ 编译器。
我下载了“qt-windows-opensource-5.1.1-mingw48_opengl-x86-offline.exe”并安装在“D:\Qt-library\5.1.1\mingw48_32\”。

然后在 CB 中,我在 Tools->Configure tools->add 中添加了三个名为“qmake -project”、“qmake”和“make”的工具。
“qmake -project” 可执行文件“D:\Qt-library\5.1.1\mingw48_32\bin\qmake.exe”,参数:“-project -platform win32-g++”
“qmake” 可执行文件与“qmake -project”相同",无参数;
“make”与可执行文件“D:\Qt-library\Tools\mingw48_32\bin\mingw32-make.exe”,无参数
工作目录全部设置为“${PROJECT_DIR}”

然后我单击项目-> 属性,选择“这是一个自定义 Makefile”

然后我在上面创建的工具菜单中单击“qmake -project”菜单项,qmake 生成了一个 .pro 文件。
因为我用

    #include <QApplication>

代替

    #include <QtGui/QApplication>

在 main.cpp 文件中,所以我在 .pro 文件中添加了“QT += 小部件”。
然后点击工具菜单中的“qmake”,生成makefile。如果我直接make,是不会编译的,因为它不支持一些C++11的语法,
所以我编辑了Makefile.Debug和makefile.Release,看起来是这样的:

    CC            = gcc
    CXX           = g++
    DEFINES       = -DUNICODE -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_NEEDS_QMAIN
    CFLAGS        = -pipe -fno-keep-inline-dllexport -O2 -Wall -Wextra $(DEFINES)
    CXXFLAGS      = -pipe -fno-keep-inline-dllexport -O2 -frtti -Wall -Wextra -fexceptions -mthreads $(DEFINES)

我在 CXXFLAGS 行添加了 -std=c++0x,所以它变成了

    CXXFLAGS      = -pipe -std=c++0x -fno-keep-inline-dllexport -O2 -frtti -Wall -Wextra -fexceptions -mthreads $(DEFINES)

(如果我使用 -std=c++11,它将不适用于我的 MinGW 版本)

然后在工具菜单中点击“make”,我得到两个错误:
q主要错误

我不知道那到底是什么,但我知道我如何将 main 函数从 int main(int argc, char** argv) to修改为int qMain(int argc, char** argv). 然后再次make,两个qMain错误消失了,但我得到了这个: 权限被拒绝错误

而现在,我什么也没做,再做一次,那个错误消失了!!!但是生成的 .exe 文件不会做任何事情,无论是双击还是在命令行中运行,都不会发生任何事情(顺便说一下,虽然我包含了,但我没有编写任何 Qt 代码)如果我删除

    #include <QApplication>

并以正常方式构建项目(取消“这是一个自定义的 Makefile”并直接构建),我的程序运行良好。

还有一个很奇怪的地方,我在.pro文件中添加了CONFIG += debugCONFIG -= releaseqmake会同时生成Makefile.Debug和Makefile.Release(无论CONFIG或者debug和release都是大写还是小写),但是生成的.o文件和.exe文件都是在发布目录中,没有调试文件,这是为什么?

有人有什么想法吗?我会非常感谢你的建议。

4

1 回答 1

0

问题解决了(虽然不完美)。

事实是程序确实做了一些事情,但不知何故没有出现控制台窗口(在我添加 Qt 标头之前,我用 C++ 编写了程序并使用 cout 打印消息),因此即使我运行程序也看不到输出在控制台中。我通过编写一个简单的 Qt GUI 程序来打印结果发现了这一点,它可以工作。但我不知道为什么控制台不会出现包含 QApplication 但程序中没有 Qt 代码的原因(无论我设置项目-> 属性-> 构建目标-> 选择构建目标选项-> 类型为 GUI 或控制台) .

另一方面,我可以通过双击调试目录中的.exe文件来运行Qt GUI程序,但在Code::Blocks中却没有,它弹出“在动态链接库libstdc++-6上找不到程序入口InterlockedCompareExchange@12 .dll”。因此我无法通过 CB 调试程序。

于 2013-10-09T10:24:13.823 回答