実践 CHICKEN Scheme Qt eggをWindowsで動かす
Chicken Scheme 4.7.0のWindows環境でqt-light eggを普通にchicken-installすると(use qt-light)時にエラーが出てインポートに失敗します。
Qtの導入には地雷が多くて何度も躓いてしまったのでその対策をまとめました。
Ubuntuでは前回の記事の手順で問題ありません。
http://d.hatena.ne.jp/moondial0/20110603/1307100385
Qt4をChickenに導入する
すでにChickenやMinGWをインストールしている場合はいったん削除してください。これは、qt-light eggを動かすにはgccの特定バージョンが必要だからです。
まずQt4です。
http://qt.nokia.com/downloads-jp から
右側の「Windows 版 Qt ライブラリ 4.7.3 のダウンロード (minGW 4.4, 322 MB) 」と
左下 Qt Creator IDE の「Windows 版 Qt Creator 2.2 のダウンロード(52MB)」
をダウンロードします。
ここで「Qt SDK for Windows (15 MB) 」を選んでしまうと
約157000ファイル(約6.6GB)がインストールされます。なんという地雷。
QtSDKのインストール先はデフォルトのまま "C:\Qt\4.7.3"、MinGWのインストール位置は "C:\MinGW" とします。
Qt Creatorのインストール時には必ずMinGWのチェックを入れたままにしておきます。
インストール後にこの C:\Qt\qtcreator-2.2.0\mingw を C:\MinGW にコピーします。
環境変数Pathの末尾に「;C:\MinGW\bin\」を追加します。詳しいやり方は環境変数でググればわかります。
コマンドプロンプト(cmd.exe)を開き
mingw32-make -v
でバージョンが表示されたらきちんとPathが通っています。
CHICKEN Schemeリリース版をダウンロードしてきます。
http://code.call-cc.org/
Cドライブに解凍したフォルダをchickenと改名して置きます。
コマンドプロンプトから以下のコマンドを実行します。
C:\Users\moondial>mingw32-make -v GNU Make 3.82 Built for i386-pc-mingw32 Copyright (C) 2010 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org This is free software: you are free to change and redistri There is NO WARRANTY, to the extent permitted by law. C:\Users\moondial>cd C:\chicken C:\chicken>mingw32-make PLATFORM=mingw PREFIX=C:/mingw ...中略... C:\chicken>mingw32-make PLATFORM=mingw PREFIX=c:/mingw install ...中略... C:\chicken>csc -V (c)2008-2010 The Chicken Team (c)2000-2007 Felix L. Winkelmann Version 4.7.0 windows-mingw32-x86 [ manyargs dload ptables ] compiled 2011/05/06 on moondial (MinGW) Enter `chicken -help' for information on how to use the compiler, or try `csc' for a more convenient interface. Run `csi' to start the interactive interpreter. C:\chicken>set QTDIR=C:\Qt\4.7.3 C:\chicken>chicken-install -k qt-light ←-kオプションで一時ファイルを残す retrieving ... resolving alias `kitten-technologies' to: http://chicken.kitten-technologies.co uk/henrietta.cgi connecting to host "chicken.kitten-technologies.co.uk", port 80 ... requesting "/henrietta.cgi?name=qt-light&mode=default" ... reading response ... HTTP/1.1 200 OK ...中略... installing qt-light: ... changing current directory to C:\DOCUME~1\moondial\LOCALS~1\Temp/temp1afe/qt-light ...中略... C:\chicken>cd C:\DOCUME~1\moondial\LOCALS~1\Temp/temp1afe/qt-light ←qt-lightの一時フォルダへ移動 C:\DOCUME~1\moondial\LOCALS~1\Temp\temp1afe\qt-light>mingw32-make -f qt-light.make.Release clean C:\略\qt-light>mingw32-make -f qt-light.make.Release C:\略\qt-light>copy /Y "release\qt-light.dll" "qt-light.so" C:\略\qt-light>C:\mingw\bin\csc -feature compiling-extension -setup-mode -s -O3 -d0 qt-light.import.scm C:\略\qt-light>copy /Y "qt-light.so" "c:\mingw\lib\chicken\6\qt-light.so" C:\略\qt-light>copy /Y "qt-light.import.so" "c:\mingw\lib\chicken\6\qt-light.import.so"
はまるポイント: qt-light eggはなぜかchicken-installしたときに壊れたファイルがインストールされるので一時フォルダに入ってコンパイルしなおします。
chicken-install時に表示されたコマンドを手で実行しているだけなのですが、なぜこれでうまくいくのかはまったくの謎です。環境変数あたりが悪さをしているのでしょうか。
また、qt-light.import.soも作り直さないとうまくいかないのでこれまたはまってしまいました。
最後にQtが使用するDLLをパスの通るフォルダにコピーします。実行形式を配布する時にはこれらのDLLを実行ファイルと同じフォルダに同梱しておくのを忘れないようにしましょう。
C:\略\qt-light>cd C:\Qt\4.7.3\bin C:\Qt\4.7.3\bin>copy QtCore4.dll C:\MinGW\bin C:\Qt\4.7.3\bin>copy QtGui4.dll C:\MinGW\bin C:\Qt\4.7.3\bin>copy QtOpenGL4.dll C:\MinGW\bin C:\Qt\4.7.3\bin>copy QtXml4.dll C:\MinGW\bin
C:\>csi #;1> (use qt-light) #;2> (qt:init) #<qt-application> #;3> (qt:message "hello, Qt4 world!") 0