Install wxWidgets 3.0.2 from source on MSYS2
C++のクロスプラットホームで自由なGUIライブラリであるwxWidgetsの最新版(3.0.2)をMSYS2でソースからのインストールに成功した。ネット上で成功例が少なかったので手順を記す。
インストール手順
VER=3.0.2
cd ~/local/src wget -nc --no-check-certificate https://sourceforge.net/projects/wxwindows/files/$VER/wxWidgets-$VER.tar.bz2 tar jxf wxWidgets-$VER.tar.bz2 cd wxWidgets-$VER/
./configure --prefix=$HOME/local/stow/wxWidgets-$VER --build=x86_64-w64-mingw32 --disable-shared --enable-unicode --with-sdl --enable-stl --disable-precomp-headers
make && make install
cd ~/local/stow; stow wxWidgets-$VER
約1時間でインストールできる。
重要なconfigureオプション
--build=x86_64-w64-mingw32
:マシンタイプを指定。これを指定しないとconfigure
がうまくいかない。--build=x86_64-pc-mingw32
でもうまくいく。32bit版のコンパイラでコンパイルするなら,x86_64をi686に変更する。
--disable-shared
:スタティックのアプリの作成のため。これを指定しないとwxWidgetsを使ったプログラムをgccのコンパイルオプション-static
(ライブラリ埋め込み)で作成できない。このオプションをつけなくてもwxWidets自体のビルドはできる。しかし,wxWidgetsを使ったプログラムを以下のように-static
オプションをつけてコンパイルするとエラーになる。
g++ hi.cpp `wx-config --cppflags --libs` -static
C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/4.9.2/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lwx_mswu_xrc-3.0 C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/4.9.2/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lwx_mswu_webview-3.0 C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/4.9.2/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lwx_mswu_html-3.0 C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/4.9.2/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lwx_mswu_qa-3.0 C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/4.9.2/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lwx_mswu_adv-3.0 C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/4.9.2/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lwx_mswu_core-3.0 C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/4.9.2/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lwx_baseu_xml-3.0 C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/4.9.2/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lwx_baseu_net-3.0 C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/4.9.2/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lwx_baseu-3.0 collect2.exe: error: ld returned 1 exit status
--disable-precomp-headers
:以下のmakeでのエラーの回避のため。
/e/msys64/home/senooken/local/src/wxWidgets-3.0.2/bk-deps g++ -c -o coredll_event.o -I./.pch/wxprec_coredll -D__WXMSW__ -DWXBUILDING -I./src/regex -DWXUSINGDLL -DWXMAKINGDLL_CORE -DwxUSE_BASE=0 -Wall -Wundef -Wunused-parameter -Wno-ctor-dtor-privacy -Woverloaded-virtual -D_FILE_OFFSET_BITS=64 -I/e/msys64/home/senooken/local/src/wxWidgets-3.0.2/lib/wx/include/msw-unicode-3.0 -I./include -DWX_PRECOMP -O2 -fno-strict-aliasing ./src/common/event.cpp Makefile:29831: recipe for target 'coredll_event.o' failed make: *** [coredll_event.o] Error 1
Hello world
簡単なサンプルでコンパイルできるか試す。サンプルは以下のサイトのものを少し修正したものだ。
参考:wxWidgets http://kodamail.sakura.ne.jp/leisure/wiki/wiki.cgi/wxWidgets?lang=jp#9
// hello.cpp #include <wx/wxprec.h> #include <wx/wx.h> class helloApp: public wxApp{ public: virtual bool OnInit(); }; IMPLEMENT_APP(helloApp) bool helloApp::OnInit(){ wxMessageBox(wxT("Hello wxWidgets"), wxT("Message Box"), wxOK); return false; }
以下のコマンドでコンパイル
g++ -o hello.{exe,cpp} `wx-config --cppflags --libs` -static ./hello.exe
hello.exeを上記コマンドで実行できることと,Windowsからダブルクリックでも実行できることを確認しておく。
実行結果は以下の通り。
これでWindowsでのwxWidgetsを使ったGUIプログラムのビルド環境が入手できる。しかし,wxWidgetsに関する情報は少なく,利用者も少ない。理由がなければQtを使ったほうがいいだろう。