f

2015-03-07

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

2015-03-05

筆頭者とは,住民票で最初に名前の書かれている人のこと

転入届を提出するときに「筆頭者」という見慣れない単語があり、気になったので調べた。

日本の国籍を有する者の住民票の記載(法第6条第3項の規定により磁気ディスク(これに準ずる方法により一定の事項を確実に記録し通知編(住民基本台帳事務処理要領について)ておくことができる物を含む。以下同じ。)をもって調製する住民票にあっては、記録。以下同じ。)事項中本人の氏名、出生の年月日、男女の別、本籍及び戸籍の筆頭に記載又は記録がされた者(以下「筆頭者」

住民基本台帳法令・通知集(平成26年版)付印鑑登録証明事務処理要領・実例(p. 84-85)

上記の定義から要旨をまとめると、「住民票で筆頭(最初)に名前の書かれている人」のことと解釈できる。家族で住んでいるならば、通常は父親の氏名となる。

参考:

よくある質問 - 筆頭者とは何ですか? | 山口市 http://www.city.yamaguchi.lg.jp/cms-sypher/www/faq/detail.jsp?id=2642