|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: May 2006
Messaggi: 155
|
Thread in Unix
Questo è il codice datomi dal mio prof:
#include <stdio.h> /*printf, perror*/ #include <pthread.h> /*thread*/ #include <errno.h> /*per gli errori, perror*/ #include <stdlib.h> /*exit*/ /* thread1: stampa i TID del main thread e di due altri thread */ void *start_func(void *arg) /* funzione di avvio */ { printf("%s", (char *)arg); printf(" and my TID is: %d\n",(int)pthread_self()); } int main(void) { int en; pthread_t tid1, tid2; char *msg1 = "Hello world, I am thread #1"; char *msg2 = "Hello world, I am thread #2"; printf("The launching process has PID:%d\n",(int)getpid()); printf("The main thread has TID:%d\n",(int)pthread_self()); //crea il 1°thread if ((en = pthread_create(&tid1, NULL, start_func, msg1)!=0)) errno=en, perror("Pthread_create"), exit(1); //crea il 2°thread if ((en = pthread_create(&tid2, NULL, start_func, msg2)!=0)) errno=en, perror("Pthread_create2"), exit(2); //attende per il 1° thread if ((en = pthread_join(tid1, NULL)!=0)) errno=en, perror("Pthread_join"), exit(1); //attende per il 2° thread if ((en = pthread_join(tid2, NULL)!=0)) errno=en, perror("Pthread_join2"), exit(2); return 0; } ************************************************************************* Quando lo compilo con cc -c thread1.c non mi dà errori, ma quando voglio creare l'eseguibile con cc -o thread1 thread1.o mi dice: thread1.o: In function `main': thread1.c.text+0x97): undefined reference to `pthread_create' thread1.c.text+0xee): undefined reference to `pthread_create' thread1.c.text+0x136): undefined reference to `pthread_join' thread1.c.text+0x17e): undefined reference to `pthread_join' collect2: ld returned 1 exit status come posso farlo compilare correttamente? |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Aggiungi nella fase di link l'opzione -lpthread
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: May 2006
Messaggi: 155
|
ok!! funziona!! come mai si deve inserire questa opzione?
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
La libreria pthreads non fa parte della libreria standard del C. La stessa cosa varrebbe per qualunque altra libreria esterna/non standard. Devi specificare al linker di collegare gli oggetti del tuo programma con le librerie necessarie.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
![]() |
![]() |
![]() |
#5 |
Member
Iscritto dal: May 2006
Messaggi: 155
|
a me a volte mi hanno dato problemi anche le stringhe, quindi per utilizzare lo stesso metodo devo scrivere -lstring in fase di compilazione giusto?
|
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
In generale, l'opzione -lnome va a cercare nella/e directory dove si trovano le librerie un file denominato libnome.so oppure, se non c'è .so, con .a Tutto qui.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
#7 |
Member
Iscritto dal: May 2006
Messaggi: 155
|
ok! grazie mille, se ho altri problemi riscrivo ciao!!!
|
![]() |
![]() |
![]() |
#8 |
Member
Iscritto dal: May 2006
Messaggi: 155
|
ora invece esercitandomi sulle code di messaggi in Linux mi dà un errore simile:
mycoda1.o: In function `main': mycoda1.c ![]() mycoda1.c ![]() mycoda1.c ![]() mycoda1.c ![]() mycoda1.c ![]() collect2: ld returned 1 exit status |
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Non le ho mai viste/usate queste funzioni. Da una veloce ricerca su internet mi risulta che siano nella libreria libmqueue. Quindi prova -lmqueue
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
![]() |
![]() |
![]() |
#10 |
Member
Iscritto dal: May 2006
Messaggi: 155
|
queste sulle code l'ho trovato ed è -lrt, ora mi serve quello per i semafori, se vedi ho aperto un'altra discussione in merito a ciò!!!
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:29.