2009-07-17 12 views
41

だからここは世界で最も簡単なglibのプログラムです:なぜglibのために「こんにちはの世界」を構築できないのですか?

#include <glib.h> 

私はgcc test.cでそれをコンパイルしようと私が取得:

# dpkg -l | grep libglib 
ii libglib-perl        1:1.183-1        Perl interface to the GLib and GObject libra 
ii libglib1.2-dev       1.2.10-19build1       The GLib library of C routines (development) 
ii libglib1.2ldbl       1.2.10-19build1       The GLib library of C routines 
ii libglib2.0-0        2.20.1-0ubuntu2       The GLib library of C routines 
ii libglib2.0-cil       2.12.1-1ubuntu2       CLI binding for the GLib utility library 2.1 
ii libglib2.0-data       2.18.2-0ubuntu2       Common files for GLib library 
ii libglib2.0-dev       2.20.1-0ubuntu2       Development files for the GLib library 
ii libglibmm-2.4-1c2a      2.18.1-1        C++ wrapper for the GLib toolkit (shared lib 
test.c:1:18: error: glib.h: No such file or directory 

は、だから私は、私は右のパッケージを持っていることを確認してください

次に、/ usr/includeの下にある "glib.h"を探します。 2つの/usr/include/glib-1.2/glib.hと/usr/include/glib-2.0/glib.hが得られます。だから私は試してみてください。

$ gcc -I/usr/include/glib-2.0 -Wall test.c 
In file included from /usr/include/glib-2.0/glib/galloca.h:34, 
      from /usr/include/glib-2.0/glib.h:32, 
      from test.c:2: 
/usr/include/glib-2.0/glib/gtypes.h:34:24: error: glibconfig.h: No such file or directory 

(約10,000以上のエラーが切り取ら)

私はglibconfig.hどこでも自分のコンピュータ上に持っていないようです。

今私は何をしますか?

+1

たぶん私は愚かなことだけど、なぜあなたはヘッダをコンパイルしようとしている。

は...後で私に感謝しますか? – GManNickG

+14

は、私は、より複雑なプログラムを始めたが、「の#include」動作しない場合は、何もなります。 – mike

+0

主な機能を持っていない場合、*機能しません*。 'glib.h'を' stdio.h'に置き換えることもできません。あなたが主な機能を持っているとすれば、正しい答えは他の答えで述べた 'pkg-config'を使うことです。 –

答えて

49

glibは自分自身を隠そうとする傾向があります... GCCはサブディレクトリを自動的に検索しないため、glib-1.2やglib-2.0のglib.hを見ることができないため、include文は機能しません。

GLIBマニュアルのCompiling GLib Applicationsページを読んでください... pkg-config --cflags glib-2.0のようなコマンドを使用して、GCCの正しいフラグを取得します。

あなたがしようとしている何をすべきか標準的な方法は、「インプレース」のpkg-configコマンドを実行するためにシェルを伝える

% gcc test.c -Wall -o test `pkg-config --cflags --libs glib-2.0` 

注バックティック、です。

+3

これは隠されていません。glibconfig.hは、アーチに依存するデータのリストなので、/ usr/includeには関係しません。これは、一般の下で発見されたの/ usr/libに/ glib2/... – ntd

+0

[これは](http://askubuntu.com/a/90342)私のために働きました。 – gkiko

-2

apt-get build-depあなたの友人です - 誰もあなたが何かを構築するのに必要なすべてのパッケージを覚えていることはありません。

+2

ファイルが存在する可能性があるので、Debian固有のパッケージ管理コマンドではこの問題は解決されません。 'pkg-config'を正しく使ってください。 – mlibby

40
> > The canonical way to do what you are trying is 

> % gcc test.c -Wall -o test `pkg-config --cflags --libs glib-2.0` 

申し訳ありませんが、これは一般的な誤解であり、ELFベースのシステム、特にLinuxのほとんどの場合、うまく動作します。標準的な方法は、このように、コマンドラインで正しいと伝統的な場所で、個別にCFLAGSやライブラリに渡すことです:

gcc -Wall -o test `pkg-config --cflags glib-2.0` test.c `pkg-config --libs glib-2.0` 

それはPKG-config設定--cflags両方を受け入れるのは残念だと - -libsオプションを同時に指定すると、この誤ったmemeが決して死んでしまうことはなく、他のプラットフォームで同じことをしようとすると、Linuxでそれに慣れた人々は困惑し続けるでしょう。

+1

+1勇気のために!厳密に言えば、ソースコードファイルの名前は、すべてのオプションの後ろに表示されます。 –

+6

申し訳ありませんが、それは真実ではありません。 は、あなたが実際にインスタンスMinGWのために、いくつかの非Linuxプラットフォーム上でそのようにやってみましたか?リンカ検索をしてライブラリを処理し、オブジェクトファイルを、 は明らかにそれはコマンドでこのオプションを書き違い」と言うインスタンスhttp://gcc.gnu.org/onlinedocs/gcc/Link-Options.htmlのために参照してください。それらが指定されているためである。したがって、 'foo.oの-lz bar.o bar.oが' Z」の関数を参照している場合、これらの機能は、ファイルfoo.oの後でbar.o.前にも「ライブラリ 'Zを検索」ロードされません "。 – tml

7

@クリスは、このファイルが/usr/include/glib-2.0ではないので、それはだが、/usr/lib/glib-2.0.にあなたは口が達者-2.0 /含めるためにも、この/usr/libパスまたはコピーファイルをインクルードする必要が使用のpkg-config設定

glibconfig.h is missing 

を言ったように

0

私はすべてのあなたのglib.hプログラムをコンパイルするために、これを行います よくとしてglib.h使用しています:)

gcc pkg-config --cflags --libs glib-2.0 filename.c

pkg-config --cflags --libs glib-2を囲むようにしてください。0を引用符で囲んで とします。これはチルダの下にあります。 P

+0

あなたのコードに "' "を入れても構いません。私はいつか混乱してしまった。あなたの答えの残りの部分を読んでいないという私のせいを認めましたが、コードスニペットは不正確です。 – ALM

+0

ああ。私は逃しました... –