2

Qt 4.8.2 ライブラリ、Qt Creator 2.5.2 をダウンロードし、w32api バージョン 3.13 および GCC/g++ バージョン 4.7.0.1 で MingW を手動でインストールしました。私のOSはWindows 7 Ultimate x64です。

Qt Creator でサンプルの「プレーン C++ プロジェクト」を作成できます。問題なく 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ます。

Qt Gui アプリケーション出力の生成された exe を Dependency Walker で分析したところ、必要な 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 と addressbook も試しましたが、どちらも起動時にクラッシュしました。

4

2 に答える 2

4

アプリケーションのビルドに使用している MinGW コンパイラで Qt をビルドする必要があります。一般に、GCC は MSVC よりもバイナリ互換性の問題に敏感ではありませんが、Qt は大きくて複雑なフレームワーク ライブラリです。このような問題を明らかにするものがあるとすれば、おそらく Qt が候補に挙がるでしょう。

Qt のビルドは非常に簡単ですが、多くの時間がかかり、正常にビルドするには 2 つまたは 3 つのパッチを作成する必要があるようです。

前回 MinGW で Qt (4.7.3) をビルドしたとき、次のパッチを作成する必要がありました。Qt 4.8 に適用されるかどうかはわかりません。

  • コンパイラで C++11 モードを有効にしないでください - 新しい C++11 拡張リテラル構文では壊れる、連結された文字列リテラルを含むマクロがいくつかあります
  • MinGW の一部のディストリビューションに Microsoft の拡張機能を組み込む方法に問題がありますfloat.h。次の行を追加する必要がありました。

    #include_next <float.h>
    

    float.hジェネリック GCCfloat.hが適切に処理されるように、MinGW 固有の最後まで。nuwen 4.7.0lib/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++を適用し、GCC が認識しないオプションqmake\Makefile.win32-g++-shを削除します (無視する代わりにエラーが発生します)。-static-libstdc++

  • パッチを適用して、マクロ内の を 内の適切な場所にmkspecs/win32-g++/qmake.conf移動します。-Wl,QMAKE_LFLAGS_EXCEPTIONS_ONQMAKE_FLAGS

    QMAKE_LFLAGS        = -Wl,-enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc
    QMAKE_LFLAGS_EXCEPTIONS_ON = -mthreads
    
  • まだ存在しない場合は、MinGW のディレクトリにコピーmake.exeします。mingw32-make.exebinmingw32-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

これにはしばらく時間がかかります...うまくいけば、パッチを適用する必要はありません。

于 2012-09-12T08:13:51.357 に答える
0

私もこの問題を抱えています。私はQtn00bであり、Qtライブラリをインストールするときに、「すでにMingwをインストールしているので、Qtに付属のMingwのインストールをスキップします」と考えました。それは私に問題を与えました。Qtに付属のmingwをインストールすると、すべて問題なく動作しました。

したがって、この質問にグーグルする人への私のアドバイスは(私がしたように)、すでにインストールされているMing​​wを使用する代わりに、Qtを使用してインストールし、それを使用することです(そうでない場合は、Michaelからの回答のようにMingw内にQtライブラリを構築する必要がありますバリ)

于 2013-02-11T13:37:46.960 に答える