2013-03-03 3 views
2

J'essaie de suivre this tutoriel d'introduction sur jack (serveur audio pour linux). Dans le tutoriel, l'auteur explique que vous devez utiliser pkg-config pour trouver le cflags et libs pour la prise, ce qui rend la commande gcc comme ceci:référence non définie à `jack_client_close`, et al

gcc -o simple_client `pkg-config --cflags --libs jack` simple_client.c 

qui donne la sortie:

/tmp/ccyuOC0u.o: In function `signal_handler': 
simple_client.c:(.text+0x16): undefined reference to `jack_client_close' 
/tmp/ccyuOC0u.o: In function `process': 
simple_client.c:(.text+0x6f): undefined reference to `jack_port_get_buffer' 
simple_client.c:(.text+0x87): undefined reference to `jack_port_get_buffer' 
/tmp/ccyuOC0u.o: In function `main': 
simple_client.c:(.text+0x25b): undefined reference to `sin' 
simple_client.c:(.text+0x2c1): undefined reference to `jack_client_open' 
simple_client.c:(.text+0x372): undefined reference to `jack_get_client_name' 
simple_client.c:(.text+0x3b1): undefined reference to `jack_set_process_callback' 
simple_client.c:(.text+0x3ca): undefined reference to `jack_on_shutdown' 
simple_client.c:(.text+0x3ee): undefined reference to `jack_port_register' 
simple_client.c:(.text+0x419): undefined reference to `jack_port_register' 
simple_client.c:(.text+0x475): undefined reference to `jack_activate' 
simple_client.c:(.text+0x4c5): undefined reference to `jack_get_ports' 
simple_client.c:(.text+0x514): undefined reference to `jack_port_name' 
simple_client.c:(.text+0x52c): undefined reference to `jack_connect' 
simple_client.c:(.text+0x56e): undefined reference to `jack_port_name' 
simple_client.c:(.text+0x586): undefined reference to `jack_connect' 
simple_client.c:(.text+0x5ba): undefined reference to `jack_free' 
collect2: ld returned 1 exit status 

Je suis pas très expérimenté en général en utilisant gcc ou en écrivant c programmes (la plupart de mon expérience a été avec javascript, clojure, java, python et php). Ce que je comprends de ceci et de mes recherches, c'est que certaines bibliothèques sont manquantes ou liées incorrectement (pas sûr de laquelle).

Il suffit donc de courir pkg-config --cflags --libs jack sur ma machine, je reçois:

-ljack 

Dans le didacticiel référencé ci-dessus, l'auteur démontre la même méthode pour glaner les libs être lié à la prise, mais sa sortie se présente comme suit :

-ljack -lpthread -ldl -lrt 

Je ne sais pas ce que pthread est, mais je pense que dl est dsp-chargeur, et a rt quelque chose à voir avec en temps réel. J'ai cherché dans plusieurs répertoires appelés /lib et je n'ai rien trouvé pour ces autres bibliothèques, donc je ne pense pas qu'elles existent sur ma machine. Cependant, il me semble étrange que l'appel pkg-config ne fasse aucune mention d'eux. Comment dois-je aller pour trouver ces bibliothèques? Ou suis-je sur la mauvaise piste?

+0

Cette commande fonctionne-t-elle: 'gcc -o simple_client $ (pkg-config --cflags --libs jack) -ljack -lpthread -ldl -lrt simple_client.c'? – Tuxdude

+0

malheureusement pas – tjb1982

+0

cela vous dérange modifier l'affichage avec les erreurs que vous obtenez lorsque vous avez exécuté la commande gcc ci-dessus? Ce serait une information utile pour déboguer ce qui ne va pas. – Tuxdude

Répondre

4

Votre ligne de commande de lien est erroné, essayez plutôt celui-ci:

gcc -o simple_client simple_client.c `pkg-config --cflags --libs jack` 

L'ordre des bibliothèques d'archives en ligne de commande matters.