2010-12-02 8 views
0

J'ai un fichier app.c qui utilise deux bibliothèques GStreamer et libXml2. Pour compiler l'application type I ce qui suit sur TerminalMakefile pour une application simple

gcc -Wall $(pkg-config --cflags --libs gstreamer-0.10) app.c -o app -I/usr/include/libxml2 -lxml2 

Lorsque je tente de Makefile avec le contenu comme suit:

all: 
     gcc -Wall $(pkg-config --cflags --libs gstreamer-0.10) app.c -o app -I/usr/include/libxml2 -lxml2 
run: 
     ./app 
clean: 
     rm app 

sur l'exécution commande make je reçois les erreurs comme prévu. En fonction de ce qui précède, j'obtiens des fichiers qui, lorsqu'ils sont inclus dans Makefile, me donnent la sortie correcte.

Répondre

2

pkg-config --cflags libraryX affiche le chemin vers les fichiers d'en-tête de libraryX. Sans cela, le compilateur ne sait pas où chercher les fichiers d'en-tête, et la compilation échouera.

De même, pkg-config --libs libraryX génère le chemin vers les fichiers de bibliothèque compilés réels de libraryX. Sans cela, l'éditeur de liens ne sait pas où rechercher les fichiers de la bibliothèque et la liaison échouera.

pkg-config --cflags --libs libraryX est juste de combiner ce que j'ai décrit ci-dessus. Puisque vous utilisez gcc pour faire à la fois la compilation et la liaison, il vous suffit de passer ces paramètres ensemble à gcc.

+0

Lorsque je fais xml2-config --cflags sur ma machine hôte, j'obtiens la sortie \t -I/usr/include/libxml2 comme sortie. Mais quand je le fais dans un processeur différent (invité), j'obtiens l'erreur xml-config non trouvée si la libxml2 est installée là. Je veux compléter l'application pour l'invité de l'hôte. – w2lame

+0

Par "processeur différent", voulez-vous dire un autre nom d'utilisateur? Il est probable que la variable PKG_CONFIG_PATH ne soit pas correctement définie pour le compte invité. Essayez de faire 'echo $ PKG_CONFIG_PATH' en utilisant les deux noms d'utilisateur et comparez les résultats. – misha

+0

Aussi, assurez-vous que vous utilisez le shell 'bash' (tapez simplement' bash' à votre invite pour entrer dans un). Le shell par défaut pour certaines distributions comme Ubuntu est 'dash'. J'ai juste essayé cela dans un shell 'dash' et l'expansion de la commande (bit entre les guillemets) n'a pas été étendue correctement. – misha