web-dev-qa-db-fra.com

Pourquoi ne puis-je pas construire un "bonjour" pour glib?

Voici donc le programme glib le plus simple au monde:

#include <glib.h>

J'essaye de le compiler avec gcc test.c et j'obtiens:

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

Je m'assure donc d'avoir les bons packages:

# 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

Ensuite, je recherche n'importe quel "glib.h" n'importe où sous/usr/include. J'en reçois deux, /usr/include/glib-1.2/glib.h et /usr/include/glib-2.0/glib.h. J'essaye donc:

$ 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

(environ 10 000 erreurs supplémentaires coupées)

Je ne semble pas avoir un glibconfig.h n'importe où sur mon ordinateur.

Qu'est-ce que je fais maintenant?

44
mike

glib a tendance à se cacher ... Votre instruction include ne fonctionne pas car GCC ne recherche pas automatiquement les sous-répertoires et ne peut donc pas voir le glib.h dans glib-1.2 ou glib-2.0.

Lisez la page Compilation d'applications GLib dans les manuels GLIB ... vous utilisez des commandes comme pkg-config --cflags glib-2.0 pour obtenir les bons indicateurs pour GCC.

La manière canonique de faire ce que vous essayez est

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

Notez les back-ticks, qui indiquent au Shell d'exécuter la commande pkg-config "sur place".

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`

Désolé, mais non. C'est une idée fausse courante, qui se produit juste dans la plupart des cas sur des systèmes basés sur ELF, Linux en particulier. La manière canonique consiste à passer les cflags et les bibliothèques séparément, aux emplacements corrects et traditionnels sur la ligne de commande, comme ceci:

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

Il est dommage que pkg-config accepte à la fois les options --cflags et --libs, car cela signifie que ce mème incorrect ne mourra jamais, et les gens qui y sont habitués sous Linux continueront d'être déconcertés lorsqu'ils essaieront ensuite la même chose sur d'autres plateformes.

40
tml

Comme @chris ladite utilisation pkg-config.

glibconfig.h is missing 

c'est parce que ce fichier n'est pas dans le /usr/include/glib-2.0, mais en /usr/lib/glib-2.0. Vous devez donc inclure également ce /usr/lib chemin ou copiez le fichier dans le /include/glib-2.0

7
sobingt

J'utilise aussi glib.h - Faites cela pour compiler tous vos programmes glib.h :)

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

Assurez-vous d'entourer pkg-config --cflags --libs glib-2.0 avec des guillemets que vous trouvez sous tilde (touche la plus à gauche du clavier querty).

Merci plus tard ..: P

0
Amninder Singh