Oppure

Loading
21/11/12 16:08
wallrock
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:

#include <stdio.h>
#include <pthread.h>

int sum;
void *runner(void *param);


int main(int argc, char *argv[])
{
        pthread_t tid;
        pthread_attr_t attr;

        if(argc !=2)
        {
                fprintf(stderr, "Usage: ThreadExamp.out <integer value>\n");
                return -1;

        }
        if(atoi(argv[1])<0)
        {
                fprintf(stderr, "%d must be >= 0", atoi(argv[1]));
                return -1;

        }

        pthread_attr_init(&attr);
        pthread_create(&tid, &attr, runner, argv[1]);
        pthread_join(tid,NULL);
        printf("sum= %d\n", sum);


        return 0;
}

void *runner(void *param)
{
        int i, upper=atoi(param);
        sum =0;
        for(i =1; i<=upper; i++);
        pthread_exit(0);
}



Le istruzioni sono per la creazione dei Thread in Linux.

Grazie mille in anticipo,

Wallrock
aaa
21/11/12 16:23
nessuno
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 ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
22/11/12 15:46
wallrock
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...:(
aaa
22/11/12 15:54
nessuno
Ma tu come compili?
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
22/11/12 16:23
wallrock
Postato originariamente da nessuno:

Ma tu come compili?


gcc -c threadWithAPI.c

gcc threadWithAPI.o -lpthread -o ThreadExample
aaa
22/11/12 16:35
nessuno
Prova semplicemente con

gcc -pthread threadWithAPI.c -o ThreadExample
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
22/11/12 21:36
wallrock
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:
aaa