reliant la bibliothèque pthread problème
Suis confronté à un problème qui pourrait être un peu compliqué à expliquer et à comprendre, donnant à l'ensemble l'image serait trop grande et difficile.
Veuillez m'excuser pour cela.
Considérer le Makefile suivant:
all: clients.so simulator backup
LD_PRELOAD=/home/Juggler/client/clients.so ./simulator
backup: backup.c libclient.a
gcc backup.c -o backup -L /home/Juggler/client -L. -lclient -ldl
simulator: simulator.c libclient.a
gcc -g simulator.c -o simulator -L /home/Juggler/client -L. -lclient -ldl -pthread
libclient.a: libclient.o client.o
ar rcs libclient.a libclient.o client.o
libclient.o:libclient.c
gcc -c libclient.c -o libclient.o -pthread
clients.so: client.o client_invoke.o
ld -shared -o clients.so client_invoke.o client.o -ldl
client_invoke.o: client_invoke.c
gcc -Wall -fPIC -DPIC -c -g client_invoke.c
client.o: client.c
gcc -Wall -fPIC -DPIC -c -g client.c -ldl -pthread
Nous appelons la fonction écrite au client.c à partir de libclient.c et ces fonctions au client.c faire appel à pthread_key_create(), pthread_setspecific..etc.
Threads sont créés par le simulateur.c et thèses de threads accèdent à des fonctions écrites dans d'autres fichiers.
Sur le fait de faire faire des Erreurs...comme les suivantes apparaissent.
/home/Juggler/client/libclient.a(client.o):In function 'setup_connection':
/home/Juggler/client/client.c:35: undefined reference to 'pthread_setspecific'
pthread.h a été inclus dans les deux client.c et libclient.c
Serais reconnaissant pour anypointers . Je comprends que l'information est très inférieur...
Grâce
OriginalL'auteur Lipika Deka | 2011-09-14
Vous devez vous connecter pour publier un commentaire.
Sur linux, pthread fonctions de vivre dans la libpthread de la bibliothèque. Donc, vous avez à le lier.
La bonne façon, lors de l'utilisation de pthreads, est de compiler et lier à l'aide de la
-pthread
, qui, entre autres choses, les lien dans la bibliothèque pthread. Vous avez la-pthread
drapeau pour certains de vos exécutables, mais pas pour les autres, et pas pour vos clients.donc, bibliothèque, afin d'ajouter le drapeau si nécessaire.Aussi, n'oubliez pas, lorsque vous créez une bibliothèque partagée, vous devez compiler les fichiers sources avec l'option-fPIC drapeau.
(Et, semble que vous appelez
ld
de produire directement le client.donc, bibliothèque, vous devriez vraiment utiliser gcc pour faire la liaison.)OriginalL'auteur nos