以前の記事で、 Windows に MinGW GCC をインストールして GTK+アプリケーションを作成する方法を紹介しました。今回は、 その時に使ったソースコードをそのまま Linux でビルドしてみます。使用する Linux ディストリビューションは Ubuntu 17.10 です。
ソースコード
GTK+アプリケーションのサンプルソースコードは以下の構成になっています。
- sample-gtkmm
以下のリンクからサンプルコードを ZIP 形式でダウンロードできます。
何も準備せずにビルドしてみる
ソースコード一式を Ubuntu (Linux) へコピーして make
コマンドを実行してみます。
sample-gtkmmをビルドする(1回目)$ make
The program 'make' can be found in the following packages:
* make
* make-guile
Try: sudo apt install <selected package>
make
コマンドがインストールされていないためビルドすることはできませんでしたが、 以下のメッセージが表示されました。
日本語訳プログラム 'make' は以下のパッケージにあります。
* make
* make-guile
試して: sudo apt install <選択したパッケージ>
どのパッケージをインストールすれば make
コマンドが使えるようになるのか教えてくれるんですね。これは便利です。
必要なコマンドをインストールする
不足している make
パッケージをインストールしていきましょう。
makeパッケージをインストールするコマンド$ sudo apt install make
他にも g++
、 pkg-config
が必要になるので一緒にインストールしておきます。
g++パッケージをインストールするコマンド$ sudo apt install g++
pkg-configパッケージをインストールするコマンド$ sudo apt install pkg-config
これで必要なコマンドは揃ったはずです。もう一度 make
してみましょう。
sample-gtkmmをビルドする(2回目)$ make
Package gtkmm-3.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing `gtkmm-3.0.pc'
to the PKG_CONFIG_PATH environment variable
No package 'gtkmm-3.0' found
g++ -c -o obj/MyWindow.o src/MyWindow.cpp
In file included from src/MyWindow.cpp:1:0:
src/MyWindow.h:4:10: fatal error: gtkmm.h: No such file or directory
#include <gtkmm.h>
^~~~~~~~~
compilation terminated.
Makefile:26: recipe for target 'obj/MyWindow.o' failed
make: *** [obj/MyWindow.o] Error 1
コマンドだけでなく gtkmm-3.0
などのライブラリも不足していましたね。
必要なライブラリをインストールする
不足している gtkmm-3.0
パッケージをインストールしていきましょう。
gtkmm-3.0パッケージをインストールするコマンド$ sudo apt install gtkmm-3.0
様々な依存ライブラリが一緒にインストールされるので少し時間がかかります。ゆっくりと待ちましょう。
ビルド
これでコマンドもライブラリも揃いました。今度こそビルドが成功するはずです。
sample-gtkmmをビルドする(3回目)$ make
エラーが表示されることなく終了すればビルド成功です。
実行ファイルが出来上がったことを確認する$ ls -l bin
total 48
-rwxr-xr-x 1 user user 47568 Feb 8 03:27 sample-gtkmm
ちゃんと bin/sample-gtkmm
ファイルが出来上がっています。
実行
それでは実行です。
sample-gtkmmを実行する$ bin/sample-gtkmm &
上手くいきましたね。Windows 上の Eclipse CDT で開発を進めてきた GTK+アプリケーションを、 何も変更することなく、 そのまま Linux でビルドして実行することができました。