2009年4月18日土曜日
[Windows][Qt]: Windows&Qt 4.5環境でstatic linkedなプログラムを作る
Windows上でQt SDK 4.5を使ってコードを書いていて,コンパイルすると,通常はshared libraryなコードがはき出される.
shared linkはファイルサイズが小さくなって良いのだが,動作環境にQt 4.5のライブラリが無いと動かないので,配布には不向きである.
というわけで,Qtでqmakeしたコードがstatic linkになるように設定する.
Qt公式ドキュメントでは,Qtのインストールディレクトリで
configure -static
すればいいことになっている.
しかし,Qt 4.5でこれをやると途中で止まってしまい,Makefileが生成されない.具体的には
Generating Makefiles...
Could not find mkspecs for your QMAKESPEC(win32-g++) after trying:
C:/qt-greenhouse/Trolltech/Code_less_create_more/Trolltech/Code_less_create_more/Troll/4.5.0/qt\mkspecs
Error processing project file: C:/Qt/2009.01/qt/projects.pro
Qmake failed, return code 3
といって止まってしまう.
エラーメッセージをよく見ると,mkspecsのパスがC:/qt-greenhouse/Trolltech/Code_less_create_more/Trolltech/Code_less_create_more/Troll/4.5.0/qt\mkspecsというところに決め打たれているのが原因であることが分かる.
そもそも本来のmkspecsはデフォルトではC:\Qt\2009.01\qt\mkspecsになるはずである.
調べてみると,とりあえずの回避策が見つかった.
http://www.qtcentre.org/forum/archive/index.php/t-19227.html
具体的には,JunctionというWindows上でシンボリックリンクを実現するソフトを使い,決め打たれているパスから正しいmkspecsへのリンクを貼ってやる事になる.
まずはJunctionのダウンロードページからJunctionをダウンロードし,インストールする.
その後,C:/qt-greenhouse/Trolltech/Code_less_create_more/Trolltech/Code_less_create_more/Trollディレクトリまでを手動で作成し,以下のコマンドをコマンドプロンプトで実行する.
junction C:/qt-greenhouse/Trolltech/Code_less_create_more/Trolltech/Code_less_create_more/Troll/4.5.0 C:\qt\2009.01
この後,Qtのインストールディレクトリで通常通り
configure -static
mingw32-make.exe
すれば良い.Qtの再コンパイルには相当な時間がかかる.僕の手元では7時間以上かかった.
コンパイルが終われば,後は通常通りQt CreatorからプロジェクトをCleanしてBuildすれば良い.
これでstatic linkされたバイナリが作成できる.
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿