« Posts under プログラミング

Code::Blocks with wxWidgets for Windows7 x64 で遊びたかった

急にGUIアプリケーションを作りたくなったので、なんとなくネイティブアプリにしたいという条件からいろいろ調べて表題の組み合わせになったのだけど
思いの外すんなり行かなかったので、忘れないようにサンプルコードをビルドできたところまでメモしておく
箇条書きでかつどんなエラー出てダメだったのか書かないあたり参考にならないことうけ合いである

Code::Blocksはプログラムとか書くときのIDE
wxWidgetsはクロスプラットフォームなGUIツールキット
gccはコンパイラ

ダウンロードしたもの

TDM-GCC : News から、tdm-gcc-webdl.exe
Code::Blocks から、codeblocks-12.11mingw-setup.exe(あとで思ったけどTDM-GCCを別で入れてるからmingw要らなかった)
wxWidgets から、wxWidgets-2.9.5.zip(セットアップのexeはなんかビルドできなかったのでzipにした。原因は分からない)

インストール

TDM-GCCをインストールする。c:\Apps\TDM-GCC-64\ にいれた
コンポーネントはデフォルトのまま。gccはcoreとC++にチェック、他は全部チェックがデフォルトだと思う
gccにobjcってあるんだけどこれ入れたらiOSアプリ作れたりするんかね?公開するのにMac本体必要だから試さないけど

wxWidgetsを展開する。c:\Apps\wxWidgets-2.9.5\ にいれた
特に書くこともないけど展開するだけだし

Code::Blocksをインストールする。c:\Apps\CodeBlocks\ にいれた
コンポーネントはFullで全部入れた
日本語化が必要な人は各自調べましょう。ランゲージファイルをダウンロードしてアレしてコレする感じで

wxWidgetsのビルド

wxWidgetsはソースコードでしか提供されていないので、各自ビルドしてライブラリを作らないといけない
各コンパイラごとにmakefileが用意されてるのでそれを使う
コマンドプロンプトを起動(Win+R→cmdとか)して、以下のコマンドを叩く

> cd c:\Apps\wxWidgets-2.9.5\build\msw\
> mingw32-make -f makefile.gcc UNICODE=1 SHARED=0 BUILD=debug clean
> mingw32-make -f makefile.gcc UNICODE=1 SHARED=0 BUILD=debug CXXFLAGS=”-fno-keep-inline-dllexport”
> mingw32-make -f makefile.gcc UNICODE=1 SHARED=0 BUILD=release clean
> mingw32-make -f makefile.gcc UNICODE=1 SHARED=0 BUILD=release CXXFLAGS=”-fno-keep-inline-dllexport”

途中で error: using typedef-name ‘COMDLG_FILTERSPEC’ after ‘struct’ みたいなエラーが出て止まる場合は
cannot build 2.9.5 with latest mingw-w64 cross compiler (gcc 4.8.1): undefined reference to wxMSLUXXX – Google グループ
この辺ながめてみると解決すると思う。具体的には下から5つめあたり参照

Code::Blocksの設定

起動したら、設定→環境 から
環境変数を開いて、下の方にある 追加 ボタンから WXWIN=c:\Apps\wxWidgets-2.9.5 となるように追加する
Code::Blocksの環境変数設定

設定→グローバル変数 から
base=${WXWIN}
include=${WXWIN}\include
lib=${WXWIN}\lib
となるように追加する
Code::Blocksのグローバル変数設定

設定→コンパイラ から
TDM-GCCを使う設定を追加する
元からある GNU GCC Compiler をコピーして、編集する方法を取った
Code::Blocksのコンパイラ設定

プロジェクト→ビルドオプション から
コンパイラをTDM-GCC使うようにした設定を選択し、リンカ設定が不足しているので追加し、ディレクトリの検索が不足しているので追加する
Debugの場合とReleaseの場合でリンカ設定、ディレクトリの検索が微妙に違うので注意する(Debugの場合はファイル名などの末尾に d が増える)

<Debugのリンカ設定>
wxmsw29ud_core
wxbase29ud
wxtiffd
wxjpegd
wxpngd
wxzlibd
Code::Blocksのリンカ設定(Debug)

<Debugのディレクトリの検索>
C:\Apps\wxWidgets-2.9.5\lib\gcc_lib\mswud を追加する
このディレクトリに wx/setup.h があるため、入れておかないとエラーが出る
Code::Blocksのディレクトリの検索(Debug)

<Releaseのリンカ設定>
wxmsw29u_core
wxbase29u
wxtiff
wxjpeg
wxpng
wxzlib
Code::Blocksのリンカ設定(Release)

<Releaseのディレクトリの検索>
C:\Apps\wxWidgets-2.9.5\lib\gcc_lib\mswu を追加する
Code::Blocksのディレクトリの検索(Release)

おわり

ここまでやれば多分、ファイル→新規→プロジェクト から wxWidgets project で作ったサンプルコードがビルド出来ると思う
ただ、手元の環境でdebugビルドが71.7 MB (75,186,249 バイト)、releaseビルドが6.42 MB (6,742,016 バイト)となかなかのびっくりサイズになったので注意
GUI出すだけなのにこのファイルサイズは如何なものか・・・多分設定で削減は可能だと思うけどそこまで見てない
その気になったら調べることにして、とりあえずコード書いて遊ぼうと思う