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を使ったほうがいいだろう。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です