Momonga Linux4でC言語+GTKでコンパイルする方法(コンパイルのみ) | PC-Unix弄り始めました。

Momonga Linux4でC言語+GTKでコンパイルする方法(コンパイルのみ)

GNOME用のアプレットの作り方を調べてたが、
#include <gtk/gtk.h> が無いとばかり残念な気持ちになっていたが解決したので一応書いておく


そもそも gcc のインクルードパスにgtkのヘッダーファイルやライブラリのパスが通っていなかったのでコンパイルが完了するはずもありません
コンパイル完了までを手順を踏んで書いていきます。


まずソースコードの用意
これはテストなので単純なもので何もしないものでOKです
donothing.c
#include <gtk/gtk.h>
int main()
{
return 0;
}


さて、これを通常どおり
$gcc donothing.c
のようにコンパイルすると
n.c:1:21: error: gtk/gtk.h: そのようなファイルやディレクトリはありません
と怒られてしまうかも知れません
こういう方は私のように gtk のパスを通す必要があります


まず gcc がどこを見てコンパイルしているのかですが gccに-print-search-dirs オプションを付けて起動すればわかります
$ gcc -print-search-dirs
インストール: /usr/lib/gcc/i686-momonga-linux/4.1.2/
プログラム: =/usr/libexec/gcc/i686-momonga-linux/4.1.2/:/usr/libexec/gcc/i686-momonga-linux/4.1.2/:/usr/libexec/gcc/i686-momonga-linux/:/usr/lib/gcc/i686-momonga-linux/4.1.2/:/usr/lib/gcc/i686-momonga-linux/:/usr/libexec/gcc/i686-momonga-linux/4.1.2/:/usr/libexec/gcc/i686-momonga-linux/:/usr/lib/gcc/i686-momonga-linux/4.1.2/:/usr/lib/gcc/i686-momonga-linux/:/usr/lib/gcc/i686-momonga-linux/4.1.2/../../../../i686-momonga-linux/bin/i686-momonga-linux/4.1.2/:/usr/lib/gcc/i686-momonga-linux/4.1.2/../../../../i686-momonga-linux/bin/
ライブラリ: =/usr/lib/gcc/i686-momonga-linux/4.1.2/:/usr/lib/gcc/i686-momonga-linux/4.1.2/:/usr/lib/gcc/i686-momonga-linux/4.1.2/../../../../i686-momonga-linux/lib/i686-momonga-linux/4.1.2/:/usr/lib/gcc/i686-momonga-linux/4.1.2/../../../../i686-momonga-linux/lib/:/usr/lib/gcc/i686-momonga-linux/4.1.2/../../../i686-momonga-linux/4.1.2/:/usr/lib/gcc/i686-momonga-linux/4.1.2/../../../:/lib/i686-momonga-linux/4.1.2/:/lib/:/usr/lib/i686-momonga-linux/4.1.2/:/usr/lib/
こんな感じ
grep gtk すれば分かりますが gtk のディレクトリは含まれていません。


gcc に追加するための gtk のインクルードパスと、ライブラリパスの場所を得るには gtk-config を使います。
$ gtk-config --libs --cflags
-I/usr/include/gtk-1.2 -I/usr/include/glib-1.2 -I/usr/lib/glib/include
-L/usr/lib -lgtk -lgdk -rdynamic -lgmodule -lglib -ldl -lXi -lXext -lX11 -lm
得られたこの二行を gcc のオプションに加えてコンパイルをします。


例えばこんな感じ
$ gcc donothing.c -I/usr/include/gtk-1.2 -I/usr/include/glib-1.2 -I/usr/lib/glib/include -L/usr/lib -lgtk -lgdk -rdynamic -lgmodule -lglib -ldl -lXi -lXext -lX11 -lm

これで同階層にa.outが作成されるはずです

参考.
http://yun.cup.com/gtkp1.html

これはソース付きのアプレット
http://fun.poosan.net/sawa/index.php?UID=1162313067