gpt4 book ai didi

c++ - Qt 4.8.2 与 GCC 4.7.0.1 不断崩溃

转载 作者:搜寻专家 更新时间:2023-10-31 01:13:33 30 4
gpt4 key购买 nike

我已经下载了 Qt 4.8.2 库、Qt Creator 2.5.2,并使用 w32api 版本 3.13 和 GCC/g++ 版本 4.7.0.1 手动安装了 MingW。我的操作系统是 Windows 7 Ultimate x64。

我可以在 Qt Creator 中创建一个示例“Plain C++ project”;使用 g++ 编译并运行该控制台应用程序,没有任何问题。

但我无法运行 Qt 应用程序。我使用 Qt Creator,使用 Creator 的“Qt Gui Application”模板创建了一个虚拟 Qt 应用程序。该项目可以编译成功,没有任何错误和警告。但是当我尝试运行(从 Qt CreatorWindows Explorer )它时,二进制文件一直崩溃。调试和发布版本都会崩溃。它甚至在显示主窗口之前就崩溃了。

MingW 安装在C:\MingWC:\MingW\binPATH . Qt 安装在 C:\Qt\4.8.2C:\Qt\4.8.2\binPATH .

我使用 Dependency Walker 分析了 Qt Gui 应用程序输出的生成的 exe,发现它找到了所有必需的 DLL:

  • c:\windows\system32\KERNEL32.DLL
  • c:\windows\system32\MSVCRT.DLL
  • c:\mingw\bin\LIBGCC_S_DW2-1.DLL
  • c:\mingw\bin\LIBSTDC++-6.DLL
  • c:\qt\4.8.2\bin\QTCORE4.DLL
  • c:\qt\4.8.2\bin\QTGUI4.DLL

那么,是什么导致了运行时崩溃?

编辑

我还尝试了 Qt 的示例项目:2dpainting 和地址簿——它们在启动时都崩溃了。

最佳答案

您应该使用用于构建应用程序的 MinGW 编译器构建 Qt。 GCC 通常不像 MSVC 那样对二进制兼容性问题敏感,但 Qt 是一个大而复杂的框架库。如果有什么能暴露这些类型的问题,Qt 可能会在候选名单上。

构建 Qt 非常简单,但需要花费大量时间,而且我似乎总是需要打两三个补丁才能成功构建。

上次我用 MinGW 构建 Qt (4.7.3) 时,我必须打以下补丁——我不确定它们是否仍然适用于 Qt 4.8:

  • 确保不要在编译器中启用 C++11 模式 - 有几个带有串联字符串文字的宏在新的 C++11 扩展文字语法下中断
  • 某些 MinGW 发行版将 Microsoft 扩展合并到 float.h 时存在问题- 我不得不有时不得不添加行:

    #include_next <float.h>

    到 MinGW 特定 float.h 的结尾所以通用 GCC float.h会得到妥善处理。我必须为 nuwen 4.7.0 执行此操作 lib/gcc/i686-pc-mingw32/4.7.0/include/float.h和 TDM 4.6.1 32 位发行版 lib/gcc/mingw32/4.6.1/include/float.h (TDM 的 64 位发行版不需要此补丁)。

  • 补丁 qmake\Makefile.win32-g++qmake\Makefile.win32-g++-sh删除 -static-libstdc++ GCC 无法识别的选项(现在出错而不是忽略)

  • 补丁 mkspecs/win32-g++/qmake.conf移动 -Wl,QMAKE_LFLAGS_EXCEPTIONS_ON宏在 QMAKE_FLAGS 中的适当位置:

    QMAKE_LFLAGS        = -Wl,-enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc
    QMAKE_LFLAGS_EXCEPTIONS_ON = -mthreads
  • 复制 make.exemingw32-make.exe在 MinGW 的 bin目录,如果还没有 mingw32-make.exe

然后构建 Qt 包括:

  set QTDIR=<location of Qt source directory>  # where configure.exe is
set PATH=%QTDIR%\bin;c:\MinGW\bin;%PATH%
set INCLUDE=
set LIB=
cd %QTDIR%

mingw32-make confclean # (this should fail the first time, since there's nothing to clean)
configure.exe -opensource -debug-and-release -nomake examples -nomake demos -nomake tests -platform win32-g++ # and accept the GPL license
mingw32-make

这需要一段时间......希望没有其他需要修补。

关于c++ - Qt 4.8.2 与 GCC 4.7.0.1 不断崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12381205/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com