web-dev-qa-db-ja.com

glibの「hello world」を構築できないのはなぜですか?

これが世界で最も単純なglibプログラムです。

#include <glib.h>

gcc test.cでコンパイルしようとすると、次のようになります:

test.c:1:18: error: glib.h: No such file or directory

そのため、適切なパッケージがあることを確認します。

# 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

次に、/ usr/includeの下にある「glib.h」を検索します。 /usr/include/glib-1.2/glib.hと/usr/include/glib-2.0/glib.hの2つを取得します。だから私は試します:

$ 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がないようです。

私は今何をしますか?

44
mike

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

GLIBマニュアルの GLibアプリケーションのコンパイル ページを読んでください... pkg-config --cflags glib-2.0 GCCの正しいフラグを取得します。

あなたがしようとしていることを行う標準的な方法は

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

バックティックに注意してください。これは、シェルにpkg-configコマンドを「インプレース」で実行するように指示します。

52
Chris Arguin
> > 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の両方のオプションを同時に受け入れるのは残念です。これは、この誤ったミームが決して死ぬことはなく、Linuxでそれを使用した人々が引き続き試してみると困惑することを意味するためです。他のプラットフォームでも同じです。

40
tml

なので @chris使用を言ったpkg-config

glibconfig.h is missing 

これは、このファイルが/usr/include/glib-2.0、ただし/usr/lib/glib-2.0.したがって、これも含める必要があります/usr/libパスまたはファイルを/include/glib-2.0

7
sobingt

私もglib.hを使用しています-これを実行して、すべてのglib.hプログラムをコンパイルします:)

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

pkg-config --cflags --libs glib-2.0チルダの下にあるバッククォート付き(クォーティーなキーボードの左端のキー)。

後でありがとう..:P

0
Amninder Singh