Bonjour,
OS = Mandriva PowerPack 2007
voici le résultat de ma compilation :
undefined reference to 'pthread_kill (unsigned long, int)'
voici ma ligne de compilation :
g++ sample1.cpp -o sample1 -lpthread
Pouvez vous me dire pourquoi j'ai une erreur ?
Ce qui est bizarre c'est que si j'enlève le pthread_kill, les fonctions pthread_create, pthread_join fonctionne bien....
j'ai essayé pthread_cancel à la place de pthread_kill mais ça bloque mon programme, même si je paramètre mon thread avec pthread_setcancelstate et pthread_setcanceltype.
Pouvez vous m'indiquer comment il faut utiliser pthread_cancel ?
Quel est la différence entre pthread_kill et pthread_cancel ?
Merci.
# mes 2cts
Posté par TheBreton . Évalué à 1.
>Pouvez vous me dire pourquoi j'ai une erreur ?
A premiere vue parceque pthread_kill est déclarée avec
int pthread_kill(pthread_t thread, int sig);
et que dans ton programme le permier argument que tu lui donne n'est pas un pthread_t mais un ulong donc le linker hurle a la fonction manquante ?
Tu n'aurais pas un & qui traine devant le nom de ta variable sur la ligne de pthread_kill ?
[^] # Re: mes 2cts
Posté par steven51 . Évalué à 1.
voici l'extrait de mon code :
main()
{
pthread_t tc;
.....
pthread_create....
.....
pthread_kill(tc,9);
...
}
précision sur l'erreur :
undefined reference to 'pthread_kill (unsigned long, int)'
ld return 1 exit status.
[^] # Re: mes 2cts
Posté par Laurent Morel . Évalué à 2.
Essaie de linker également avec l'option -lrt : je crois que pthread_kill() fait partie des extensions temps-réel de posix qui, dans le domaine des signaux multithreadés, sont ce qu'il se conçoit de plus simple -- pour placer des bugs dans le code s'entend.
Sinon je ne vois pas d'autres pistes ? Le fait que ton linker connaisse le type des arguments de la fonction manquante me fait penser à un problème de C/C++. pthread_kill() ne serait pas déclarée extern "C" ??
Enfin si : supprimer les appels à pthread_kill() et pthread_cancel() de ton code : en plus de lier correctement, tu enlèveras des bugs. Ou alors, sois paranoïaque et relis cinq fois la documentation. Le livre "Programmation système en C sous Linux" de Blaess (une référence) décrit très bien les problèmes auxquels on s'expose avec ces p*** de fonctions, et comment les éviter (c'est quasi impossible).
[^] # Re: mes 2cts
Posté par steven51 . Évalué à 1.
Maintenant ça compile correctement.
Merci
[^] # Re: mes 2cts
Posté par steven51 . Évalué à 1.
J'avais bien <pthread.h> avant <signal.h> mais j'avais aussi <bits/signal.h> et apparement c'était lui qui me foutait la patouille...je l'ai supprimé et Oh mircacle ! ça fonctionne !!
Merci.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.