Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Linux: Thread in C errore di compilazione riferimento a libreria pthread.h
Forum - C/C++ - Linux: Thread in C errore di compilazione riferimento a libreria pthread.h

Avatar
wallrock (Member)
Newbie


Messaggi: 5
Iscritto: 01/07/2012

Segnala al moderatore
Postato alle 17:08
Mercoledì, 21/11/2012
Buona sera a tutti,

volevo chiederVi se sapete perchè il compilatore gcc per Linux mi da il seguente errore:

threadWithAPI.c:(.text+0xcd): riferimento non definito a "pthread_create"
threadWithAPI.c:(.text+0xde): riferimento non definito a "pthread_join"
collect2: error: ld returned 1 exit status

di seguito Vi è il listato inerente alla compilazione errata:

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <pthread.h>
  3.  
  4. int sum;
  5. void *runner(void *param);
  6.  
  7.  
  8. int main(int argc, char *argv[])
  9. {
  10.         pthread_t tid;
  11.         pthread_attr_t attr;
  12.  
  13.         if(argc !=2)
  14.         {
  15.                 fprintf(stderr, "Usage: ThreadExamp.out <integer value>\n");
  16.                 return -1;
  17.  
  18.         }
  19.         if(atoi(argv[1])<0)
  20.         {
  21.                 fprintf(stderr, "%d must be >= 0", atoi(argv[1]));
  22.                 return -1;
  23.  
  24.         }
  25.  
  26.         pthread_attr_init(&attr);
  27.         pthread_create(&tid, &attr, runner, argv[1]);
  28.         pthread_join(tid,NULL);
  29.         printf("sum= %d\n", sum);
  30.  
  31.  
  32.         return 0;
  33. }
  34.  
  35. void *runner(void *param)
  36. {
  37.         int i, upper=atoi(param);
  38.         sum =0;
  39.         for(i =1; i<=upper; i++);
  40.         pthread_exit(0);
  41. }



Le istruzioni sono per la creazione dei Thread in Linux.

Grazie mille in anticipo,

Wallrock


Ieri è storia, domani è un mistero ma oggi è un dono, per questo si chiama presente.

Confucio (K'ung Fu-tzu)
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 17:23
Mercoledì, 21/11/2012
Alla linea di comando devi aggiungere il riferimento alla libreria per il linker

   -lpthread

P.S. pthread.h NON è una libreria


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
wallrock (Member)
Newbie


Messaggi: 5
Iscritto: 01/07/2012

Segnala al moderatore
Postato alle 16:46
Giovedì, 22/11/2012
Testo quotato

Postato originariamente da nessuno:

Alla linea di comando devi aggiungere il riferimento alla libreria per il linker

   -lpthread

P.S. pthread.h NON è una libreria



Grazie mille per il suggerimento però l'errore persiste...:(


Ieri è storia, domani è un mistero ma oggi è un dono, per questo si chiama presente.

Confucio (K'ung Fu-tzu)
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 16:54
Giovedì, 22/11/2012
Ma tu come compili?


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
wallrock (Member)
Newbie


Messaggi: 5
Iscritto: 01/07/2012

Segnala al moderatore
Postato alle 17:23
Giovedì, 22/11/2012
Testo quotato

Postato originariamente da nessuno:

Ma tu come compili?



gcc -c threadWithAPI.c

gcc threadWithAPI.o -lpthread -o ThreadExample


Ieri è storia, domani è un mistero ma oggi è un dono, per questo si chiama presente.

Confucio (K'ung Fu-tzu)
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 17:35
Giovedì, 22/11/2012
Prova semplicemente con

gcc -pthread threadWithAPI.c -o ThreadExample


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
wallrock (Member)
Newbie


Messaggi: 5
Iscritto: 01/07/2012

Segnala al moderatore
Postato alle 22:36
Giovedì, 22/11/2012
Testo quotato

Postato originariamente da nessuno:

Prova semplicemente con

gcc -pthread threadWithAPI.c -o ThreadExample



Perfetto compilazione eseguita correttamente e il file eseguibile funziona.

Grazie Mille :k:


Ieri è storia, domani è un mistero ma oggi è un dono, per questo si chiama presente.

Confucio (K'ung Fu-tzu)
PM Quote