2011/06/19

[qt]Windowsのmingw版でmakeがエラーになる

QtのWindows版をインストールした。
今の最新版は、Version 1.1.1である。
http://qt.nokia.com/downloads

オンラインでインストールするのはあまり好きではないので、Direct downloadからダウンロード。
1.5GBもある。。。
インストールは、デフォルト設定で行った。
C:\QTSDKというところにインストールされるが、まあ気にすまい。

Qt Creatorを起動させ、とりあえずサンプルを動かしてみようとした。
サンプルの「Qt C++のサンプルを参照する」で「Main Window > Menus」を選ぶ。
なんか出てくるので、OKとする。
そうすると開発画面になるので、左下のトンカチをクリック。

Interrupt/Exception caught (code = 0xc0000005, addr = 0x41f96e)
燃え上がっていたQt熱が下がってしまった・・・。



クリーンをしても、同じ。
Qt Creatorでやるからかもしれないと思い、コマンドプロンプトでもやったが、同じ。
うーむ。

検索をする。
http://qt-devnotes.blogspot.com/2010/07/mingw32-makeexe-interruptexception.html
http://qt-devnotes.blogspot.com/2010/01/cqt200905mingwbinmingw32-makeexe.html
http://bugreports.qt.nokia.com/browse/QTSDK-32

一番わかりやすいのは、3つめのリンク先だ。
「複数のmingwライブラリが入ってるから」ということをいっている。
いや、そうなのかもしれないけど、じゃあ影響されないように何とかしなさいよ、と思う。

仕方ないので、mingw32-makeのデバッグをすることにした。


C:\QtSDK\Examples\4.7\mainwindows\menus-build-desktop>mingw32-make -f Makefile.Debug -d
(中略)
g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I'../../../../Desktop/Qt/4.7.3/mingw/include/QtCore' -I'../../../../Desktop/Qt/4.7.3/mingw/include/QtGui' -I'../../../../Desktop/Qt/4.7.3/mingw/include' -I'../../../../Desktop/Qt/4.7.3/mingw/include/ActiveQt' -I'debug' -I'../menus' -I'.' -I'../../../../Desktop/Qt/4.7.3/mingw/mkspecs/win32-g++' -o debug/mainwindow.o ../menus/mainwindow.cpp
Unhandled exception filter called from program mingw32-make
ExceptionCode = c0000005
ExceptionFlags = 0
ExceptionAddress = 41f96e
Access violation: write operation at address 0

g++を実行したことで捕捉できない例外が発生した、ということか。
ちょっとg++は面倒なので、もう1つ失敗したクリーンの方を見てみる。

C:\QtSDK\Examples\4.7\mainwindows\menus-build-desktop>mingw32-make -f Makefile.Debug clean -d
(中略)

rm debug/moc_mainwindow.cpp
Unhandled exception filter called from program mingw32-make
ExceptionCode = c0000005
ExceptionFlags = 0
ExceptionAddress = 41f96e
Access violation: write operation at address 0



rmで?

C:\QtSDK\Examples\4.7\mainwindows\menus-build-desktop>which rm
/usr/bin/rm

なんでwhichが使えるかというと、cygwinが入っていてパスを通しているから。
そして/usr/bin/rm というのは、cygwin側のパスだ。

C:\QtSDK\Examples\4.7\mainwindows\menus-build-desktop>which g++
/cygdrive/c/QtSDK/mingw/bin/g++

/cygdriveというのは、cygwinから見た「マイコンピュータ」みたいな位置づけ。
だから/cygdrive/cはCドライブのルートディレクトリだ。

私の推測は、cygwin側のコマンドが呼び出されるとmingw側のライブラリと不整合が起きてしまう、というもの。
rmはcygwin側だからありえそうだと思った。
しかしg++もだめってのがねぇ。。。
試しにcygwinのパスを外してみたが、現象が変わらない。

腹が立ったので、MSYSインストールした。
現在の最新版は、mingw-get-inst-20110530.exe
C++とMSYSにチェックを入れてインストール。
インストール後に、MinGw Shellを起動し、カレントディレクトリを移動。

/c/QtSDK/Examples/4.7/mainwindows/menus-build-desktop
$ mingw32-make -f Makefile.Debug

通った。
しかし、Qt CreatorもQtコマンドラインもやはりmakeでエラーになる。
なんじゃこりゃ?
そもそも、QtSDK以下にはrmがないぞ。
デフォルトでインストールしたのがまずいのか??
まったくもう。。。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。