2010-02-02 5 views
1

je ne peux pas sembler compiler ce programme de base en utilisant glib.h ...Impossible de compiler le programme GLIB de base après GLIB installer

#include glib.h 
#include stdio.h 

int main() 
{ 
return ((glib_major_version) || (glib_minor_version) || (glib_micro_version)); ; 
return 0; 
} 

glib.h est situé dans/usr/local/include/glib -2,0

Je compilé avec

$ gcc -v -c -mcpu=v9 -I/usr/local/include/glib-2.0 testme2.c 

maintenant, je me manque glibconfig.h. Mais il est en /usr/local/lib/glib-2.0/include/glibconfig.h

glibconfig.h Étrangement est le seul fichier dans le répertoire /usr/local/lib/glib-2.0/include et plus étrangement, il est pas dans /usr/local/include/glib-2.0 répertoire

Voici quelques messages d'erreur ...

from /usr/local/include/glib-2.0/glib.h:32, 
      from testme.c:40: 
:34:24: glibconfig.h: No such file or directory 

ici est un extrait de /usr/local/include/glib-2.0/glib/gtypes.h

ifndef __G_TYPES_H__ 
define __G_TYPES_H__ 

include glibconfig.h 
include glib/gmacros.h 

G_BEGIN_DECLS 

typedef char gchar; 
typedef short gshort; 

La question est de savoir comment GCC est supposé trouver glibconfig.h?

+0

Dupe: http://stackoverflow.com/questions/ 1146010/pourquoi-ne-peux-construire-un-bonjour-monde-pour-glib – ntd

Répondre

0

Il doit y avoir un programme dans la distribution glib appelé glib-config. Si vous l'exécutez avec l'argument --cflags, il affichera tous les indicateurs gcc nécessaires. Par exemple sur mon système:

$ glib-config --cflags 
-I/usr/include/glib-1.2 -I/usr/lib/glib/include 

Comme vous pouvez le voir, les deux répertoires sont spécifiés en tant que répertoires d'inclusion. Il existe également un indicateur --libs, que vous pouvez transmettre à votre éditeur de liens, de sorte que toutes les bibliothèques correctes sont liées et que le chemin de recherche de l'éditeur de liens est correctement spécifié.

+1

Pas avec Glib-2.0, il n'y en a pas. Ils ont décidé d'utiliser http://pkg-config.freedesktop.org/ au lieu de leur propre wrapper. – ephemient

+0

Ah, vous avez raison. J'ai (clairement) une vieille distribution de glib. Je vais laisser la réponse pour référence future, au cas où quelqu'un aurait affaire à une vieille version de glib. –

5

Glib installe un fichier glib-2.0.pc qui décrit toutes les options nécessaires à la compilation et à la liaison.

 
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig 
g++ -c `pkg-config --cflags glib-2.0` testme2.c 
g++ -o testme2 testme.o `pkg-config --libs glib-2.0` 

Notez l'utilisation de pkg-config dans les notes de bas de page.

+0

Je suis en train d'essayer d'installer SYSLOGNG, qui nécessite pkg-config et GLIB. J'ai besoin de retester mon installation GLIB .... depuis '#include ' devrait fonctionner hors de la boîte. Je ne devrais pas passer un -I/usr/local/include/glib-2.0 au compilateur. –

+0

Étant donné que votre glib est installé dans un emplacement non standard, vous devrez peut-être définir la variable d'environnement 'PKG_CONFIG_PATH' pour inclure l'emplacement approprié. Non, glib n'est pas censé fonctionner comme ça. Il est censé être installable en parallèle, et vous devez utiliser les options du compilateur 'pkg-config' pour déterminer l'installation à utiliser. – ephemient

3

$ pkg-config --cflags --libs glib-2.0
-I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -lglib-2.0

Il est conseillé d'utiliser pkg-config au lieu de configuration manuelle si les fichiers .pc pour les bibliothèques désirées existent et revenir à la configuration manuelle si vous avez des besoins spécifiques ou aucune configuration pour la bibliothèque que vous allez l'utilisation existe. Comme vous pouvez le voir, pkg-config demande au compilateur de placer à la fois les répertoires glib-2.0 et glib-2.0/include dans le chemin de recherche lorsque l'en-tête racine recherche dans le chemin global.

Vous pouvez déduire la sortie pkgconfig dans votre commande de compilation via gcc `pkg-config ...` ...

fichiers .pc sont généralement installés dans/usr/include/pkgconfig

+1

Étant donné que OP semble avoir une installation personnalisée de Glib dans '/ usr/local', je m'attendrais à ce que le' glib-2.0.pc' approprié existe aussi. – ephemient

+0

Bon point. Doit être probablement quelque part dans le dir local. – Damg