4.Build wxWidgets 3.1.1(3.0.4) on Debian Stretch

2018年3月26日

Debian StretchでwxWidgets 3.1.1(3.0.4)をビルドする方法を紹介します。 wxWidgets 2.8.12がお薦めですよと言いながら Ver.3.1.1をビルドするのは、ソースコードをwxWidgetsのVer.3シリーズに対応させるためです。

現在、私の作っているソースコードは Linux, Mac, Windows, 32bit, 64bit, wxWidgets 2.8.12, wxWidgets 3.0.4, wxWidgets 3.1.1の全てに対応しています。 将来、wxWidgets Ver.3シリーズが安定してきたら、いつでも移行できるようにしています。

それでは、wxWidgets 3.1.1のビルド方法を紹介しましょう。

そうそう、3.1.1と3.0.4のbuild方法は全く同じです。3.1.1を3.0.4と読み替えてください!

私の環境

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

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

wxWidgets 3.1.1 を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 libsecret-1-dev

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

LIBS="-no-pie" ../wxWidgets-3.1.1/configure --disable-shared --enable-utf8 --disable-compat28 --enable-webview --with-gtk=2 --enable-debug --prefix="/home/usr/application/stretch-i386/wx311_debug" > ans.txt

make; make install

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

LIBS="-no-pie" ../wxWidgets-3.1.1/configure --disable-shared --enable-utf8 --disable-compat28 --enable-webview --with-gtk=2 --disable-debug --prefix="/home/usr/application/stretch-i386/wx311_release" > ans.txt

make; make install

ビルドの準備 apt-get(aptitude)

 wxWidgets 2.8.12 に比較して wxWidgets 3.1.1は aptitude install libsecret-1-dev が追加されました。

configureの説明

1)wxWidgets Ver. 3.1.1は cはgnu90、gnu99、gnu11、c++はgnu++98、gnu++11、gnu++14 に対応しています。コンパイラのgcc Ver.6.3.0は標準でcはgnu11、c++はgnu++14ですのでそのまま使用します。 古いバージョンのGCCに対応しているということは古い関数のみしか使用していないということを意味しています。 新しいバージョンのGCCに対応しているということは古い関数に対する警告やエラーが修正されているということを意味しています。 (GCCは新しくなるほどエラーや警告が厳しく評価されるようになっています)

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

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

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

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

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

make中に

[-Wdeprecated-declarations]、[-Waddress]、[-Wnonnull-compare]などがでてきますが、気にしません。(笑)