大規模ソフトウェアを手探るその1 〜インストールまで〜
こんにちは。
大学の課題でフリーのペイントソフトGpaint(GNU paint)にいろいろ手を加えてみたので、これから何回かに分けて紹介していこうと思います(環境はubuntu14.04)。
まずはGpaintについて。
Gpaint - GNU Project - Free Software Foundation (FSF)
Gpaintはこんな感じの非常にシンプルなペイントソフトで、ソースコードは約15,000行、なんと全部C言語で書かれています。お世辞にも使い勝手が良いとは言えず、undo機能がない、ツールの説明がないなど、いろいろと改良の余地はありそうです。
とりあえずソースコードを自分でいじるためにビルドします。上のサイトからversion0.3.2のソースコードをダウンロードし、ファイルを解凍して
$ CFLAGS="-O0 -g" ./configure --prefix=/home/denjo/gpaint_install
$ make
$ make install
の順でインストールすれば良いのですが、コンパイルのところで多数のエラーが出てしまいます。そのうちの1つはこちら。
drawing.c: In function ‘drawing_prompt_to_save’:
drawing.c:432:69: error: ‘GTK_RESPONSE_DISCARD’ undeclared (first use in this function) gtk_dialog_add_button(GTK_DIALOG(dialog), GTK_STOCK_DISCARD,GTK_RESPONS
どういうことかわからなかったのでエラーメッセージをそのままGoogleで検索してみると、過去に全く同じところで躓いた人がいたようで、解決策がのっていました。どうやらGTKというGpaintが用いているライブラリのバージョンがGpaintが書かれた当時よりもあがってしまい、互換性のない変更が行われていたようです。エラーメッセージをそのままググるはこのあと度々お世話になりました。
こんな感じでエラーメッセージを見ながら1つ1つ対処していきますが、最後に以下のようなエラーが出ます。
$ gcc -O0 -g -o gpaint-2 about.o ..... ui.o -lgtk-x11-2.0 ..... -lglib-2.0 /usr/bin/ld: image.o: シンボル 'cos@@GLIBC_2.2.5' への未定義参照です
C言語でsinやsqrtなどの数学関数を使う際にはコンパイル時にオプション-lmをつける必要がありますが、今回はそれがないためこのようなエラーが出たと考えられます。実際手動で
$ gcc -O0 -g -o gpaint-2 about.o ..... ui.o -lgtk-x11-2.0 ..... -lglib-2.0 -lm
と最後に-lmを追加して実行すると上手く行きます。したがってmake時にオプション-lmが付くようになればよいということになるので、Makefileの中を見てみることにします。ここで先生にMakefileはMakefile.inから生成されていると教えてもらったのでMakefile.inの中を見てみると
gpaint-2: $(gpaint_2_OBJECTS) $(gpaint_2_DEPENDENCIES) @rm -f gpaint-2 $(LINK) $(gpaint_2_LDFLAGS) $(gpaint_2_OBJECTS) $(gpaint_2_LDADD) $(LIBS)
という記述が見つかります。これはコンパイルメッセージはこのように構成されているということで、最後の$(LIBS)はリンク時に指定するライブラリを表します。 したがってここに-lmが入るようにすればよく、Makefileはconfigureによって、Makefile.inをテンプレートとして生成されているのでconfigure時に
$ LIBS=-lm CFLAGS="-O0 -g" ./configure --prefix=/home/denjo/gpaint_install
と追加することで無事にコンパイルが通りました。
そんなこんなでなんとかインストールに成功します。
次回から実際に中身に手を加えていきます。