2.Build wxWidgets 2.8.12 on Debian Stretch

2018年2月13日

Debian StretchではGCC Ver. 6.3.0、wxWidgets Ver. 3.0.2が採用されています。 このバージョンで開発するのであれば apt-get(aptitude)でインストールするだけです。

私の場合、コンパイラは基本的にそのディストリビューションで採用されたバージョンを使用します。stretchの場合Ver. 6.3.0になります。gccのバージョンを変更すると、その影響はライブラリー全てに影響します。さらに配布を考えると実用的ではありません。

また、wxWidgetsは Ver. 2.8.12、 Ver. 3.0.3、 Ver. 3.1.0と複数のバージョンを使用します。 一つのバージョンのwxWidgets ライブラリをLinuxのシステムにインストールすると面倒です。 そこで私の方法を紹介します。

私の環境

 /home/usr
  ├─application(実行ファイル・ライブラリー等のインストール先)
  | └─stretch-i386
  |   ├─wx28_release
  |   ├─wx28_debug
  |
  ├─build
  | └─wxWidgets
  |   ├─wxWidgets-2.8.12(展開したソースファイル)
  |   ├─buil28debug(build作業用)
  |   ├─buil28release(build作業用)

OS:Linux Debian 9 Stretch 32bit 日本語
GCC : Ver 6.3.0 (ディストリビューション採用のバージョン)
wxWidgets : Ver 2.8.12

wxWidgets 2.8.12 をStretch上でビルドする

■ビルドに必要なライブラリーをインストールします(ルート権限)
aptitude install libgtk2.0-dev libpng-dev libjpeg-dev libtiff-dev libxinerama-dev zlib1g-dev libgstreamer1.0-dev libwebkitgtk-dev libnotify-dev libcppunit-dev libghc-opengl-dev libgstreamermm-1.0-dev

■デバッグモードのライブラリーを構築!(ユーザー権限)
cd /home/usr/build/wxWidgets; mkdir buil28debug; cd buil28debug

CFLAGS="-std=gnu90 -Wno-unused-local-typedefs -Wno-deprecated-declarations -D_WIN32_IE=0x0603" CXXFLAGS="-std=gnu++98 -Wno-unused-local-typedefs -Wno-deprecated-declarations -D_WIN32_IE=0x0603" LIBS="-no-pie -lX11" ../wxWidgets-2.8.12/configure --enable-debug --disable-display --disable-metafile --without-gnomeprint --disable-shared --with-gtk=2 --enable-unicode --prefix="/home/usr/application/stretch-i386/wx28_debug" > ans.txt

make; make install

■リリースモードのライブラリーを構築!(ユーザー権限)
cd /home/usr/build/wxWidgets; mkdir buil28release; cd buil28release

CFLAGS="-std=gnu90 -Wno-unused-local-typedefs -Wno-deprecated-declarations -D_WIN32_IE=0x0603" CXXFLAGS="-std=gnu++98 -Wno-unused-local-typedefs -Wno-deprecated-declarations -D_WIN32_IE=0x0603" LIBS="-no-pie -lX11" ../wxWidgets-2.8.12/configure --disable-debug --disable-display --disable-metafile --without-gnomeprint --disable-shared --with-gtk=2 --enable-unicode --prefix="/home/usr/application/stretch-i386/wx28_release" > ans.txt

make; make install

configureの説明

1)wxWidgets Ver. 2.8.12は cはgnu90、c++はgnu++98という規格で作られています。コンパイラはgcc Ver.6.3.0ですので標準でgnu++14を使用します。なので規格を合わせてあげます。

2)Stretch gcc V.6.3.0でbuildすると標準で「共有ライブラリ」が作成されます。これを昔のように「実行ファイル」にしたいのでLIBS="-no-pie -lX11"を入れておきます。 configureの時点で追加しておくと、自分でプログラムを作った際に毎回 LIBS="-no-pie -lX11" を実行しなくてすむためです。

3)デバック用なら--enable-debug、リリース用なら--disable-debugをしっかり入れておきます。

4)wxWidgetsのライブラリーは共有ファイルにせずに実行ファイル内に組み込みます。なので--disable-sharedを指定します。 Linuxでは一般には共有ファイルを作成してシステム(/usr)に組み込みます。しかし私の場合、wxWidgets 2.8.12 を含め複数の異なるバージョンを使用するので、システム(/usr)ではなく実行ファイル側に組み込みます。

5)インストール先もシステムではなくユーザーの領域にインストールするので --prefix="/home/…" を指定します。 これで、wxWidgwtsのビルドも、アプリケーションのビルドもユーザー環境内で完結します。(Linuxのシステム領域には一切インストールしない)

6)デバッグとリリースは異なるディレクトリにインストールします。--prefix="…/wx28_debug" --prefix="…/wx28_release" のように指定します。

アドバイス

1)プログラミングは必ず言語の仕様にそって制作されます。C/C++言語の場合、ISO規格とGNU拡張規格があります。また年度によってC言語ではgnu90、gnu99、gnu11、C++言語ではgnu++98、gnu++11、gnu++14 などがあります。 これらを把握しておく必要があります。

2)そもそもなんでwxWidgets Ver. 2.8.12なの。とお思いのあなたへ。 それは、バグが非常に少なく、安定しているためです。2018年2月現在公開されている Ver. 3.0.3、Ver. 3.1.0はあまりにもバグが多く、実使用に耐えないと判断しました。

特に初心者の方はwxWidgets Ver. 2.8.12をお勧めします。プログラムが思うように動作しない場合、それが自分のプログラムのミスなのか、システム(wxWidgets)のバグなのか判断できないと思います。 無用な混乱に陥るぐらいなら安定している方を選択すべきだと思います。