In function `main':: undefined referece to

di il
3 risposte

In function `main':: undefined referece to

Salve a tutti. Ho il seguente problema, sto creando un programma con i thread, mutex e condiction . il problema è che quando vado a compilare il seguente codice
#include<stdio.h>
#include<pthread.h>
#include<string.h>
#include<unistd.h>

#define DIMENSIONE_PAROLA 10

// definisco una struttura contenitore delle  parole da cercare 
typedef struct{
char buf[10];
int c;
}analisi;

// definisco la struttura buffer condiviso

typedef struct{
char buffer[DIMENSIONE_PAROLA];
pthread_mutex_t lock;
pthread_cond_t C;
int pieno;
}buffer;

//funzione per inizializzare la struttura buffer

void init(buffer *b){
pthread_mutex_init(&b->lock,NULL);
pthread_cond_init(&b->C,NULL);
b->pieno=0;
}

analisi parole_cercate[15];
buffer buffer_parola;
char parola[20];

void *immissione(void *data);
void *stampa(void *data);

int main (){
pthread_t th1,th2;
init(&buffer_parola);
pthread_create(&th1,NULL,immissione,NULL);
pthread_create(&th2,NULL,stampa,NULL);
pthread_join(th1,NULL);
pthread_join(th2,NULL);

void *stampa(void *data){
pthread_mutex_lock(&buffer_parola.lock);
while(&buffer_parola.pieno==0)
pthread_cond_wait(&buffer_parola.C, &buffer_parola.lock);

for(int i=0;i<10;i++){

printf("%c",&buffer_parola.buffer[i]);
}
printf("\n\n");
pthread_mutex_unlock(&buffer_parola.lock);
//&buffer_parola.pieno=0;
}


void *inserisci(void *data){ 
pthread_mutex_lock (&buffer_parola.lock); 
printf("inserisci una parola \n");
scanf("%s",&buffer_parola.buffer);
/* risveglia eventuali thread (consumatori) sospesi */
pthread_cond_signal (&buffer_parola.C);
pthread_mutex_unlock (&buffer_parola.lock);
}
}

ottengo il seguente errore

/tmp/ccpdE5xW.o: In function `main':
condizioni.c:(.text+0xb8): undefined reference to `immissione'
condizioni.c:(.text+0xdc): undefined reference to `stampa'
collect2: ld returned 1 exit status

Vi ringrazio anticipatamente per l'aiuto.

3 Risposte

  • Re: In function `main':: undefined referece to

    Il main non ha la parentesi finale e "sconfina" sulla funzione stampa

    E la funzione immissione non esiste
  • Re: In function `main':: undefined referece to

    Grazie mille!!!
    Erano proprio quelli gli errori. Adesso però quando eseguo il programma interviene per primo il thread stampa, poi si sospende e interviene il thread immetti.Il punto è che quando finisce di eseguire il codice la funzione immetti non risveglia il thread nella coda C delle condizioni.
    posto il nuovo codice
    #include<stdio.h>
    #include<pthread.h>
    #include<string.h>
    #include<unistd.h>
    
    #define DIMENSIONE_PAROLA 10
    
    // definisco una struttura contenitore delle  parole da cercare 
    typedef struct{
    char buf[10];
    int c;
    }analisi;
    
    // definisco la struttura buffer condiviso
    
    typedef struct{
    char buffer[DIMENSIONE_PAROLA];
    pthread_mutex_t lock;
    pthread_cond_t C;
    int pieno;
    }buffer;
    
    //funzione per inizializzare la struttura buffer
    
    void init(buffer *b){
    pthread_mutex_init(&b->lock,NULL);
    pthread_cond_init(&b->C,NULL);
    b->pieno=0;
    }
    
    analisi parole_cercate[15];
    buffer buffer_parola;
    char parola[20];
    
    void *inserisci(void *data);
    void *stampa(void *data);
    
    void main (){
    pthread_t th1,th2;
    init(&buffer_parola);
    pthread_create(&th1,NULL,inserisci,NULL);
    pthread_create(&th2,NULL,stampa,NULL);
    pthread_join(th1,NULL);
    pthread_join(th2,NULL);
    }
    void *stampa(void *data){
    printf("sono il thread stampa");
    pthread_mutex_lock(&buffer_parola.lock);
    while(&buffer_parola.pieno==0)
    pthread_cond_wait(&buffer_parola.C, &buffer_parola.lock);
    
    for(int i=0;i<10;i++){
    
    printf("%s",&buffer_parola.buffer[i]);
    }
    printf("\n\n");
    pthread_mutex_unlock(&buffer_parola.lock);
    //&buffer_parola.pieno=0;
    }
    
    
    void *inserisci(void *data){ 
    pthread_mutex_lock (&buffer_parola.lock); 
    printf("inserisci una parola \n");
    scanf("%s",&buffer_parola.buffer[10]);
    /* risveglia eventuali thread (consumatori) sospesi */
    buffer_parola.pieno=1;
    pthread_cond_signal (&buffer_parola.C);
    pthread_mutex_unlock (&buffer_parola.lock);
    
    }
    
    

    Grazie mille ancora per l'aiuto
  • Re: In function `main':: undefined referece to

    Risolto, posto la soluzione se può servire a qualcuno
    #include<stdio.h>
    #include<pthread.h>
    #include<string.h>
    #include<unistd.h>
    
    #define DIMENSIONE_PAROLA 10
    
    // definisco una struttura contenitore delle  parole da cercare 
    typedef struct{
    char buf[10];
    int c;
    }analisi;
    
    // definisco la struttura buffer condiviso
    
    typedef struct{
    char buffer[DIMENSIONE_PAROLA];
    pthread_mutex_t lock;
    pthread_cond_t C;
    int pieno;
    }buffer;
    
    //funzione per inizializzare la struttura buffer
    
    void init(buffer *b){
    pthread_mutex_init(&b->lock,NULL);
    pthread_cond_init(&b->C,NULL);
    b->pieno=0;
    }
    
    analisi parole_cercate[15];
    buffer buffer_parola;
    char parola[20];
    
    void *inserisci(void *data);
    void *stampa(void *data);
    
    void main (){
    pthread_t th1,th2;
    init(&buffer_parola);
    pthread_create(&th1,NULL,inserisci,NULL);
    pthread_create(&th2,NULL,stampa,NULL);
    
    pthread_join(th1,NULL);
    printf("aspetto thread 1\n");
    pthread_join(th2,NULL);
    printf("aspetto thread 2\n");
    }
    void *stampa(void *data){
    printf("sono il thread stampa\n");
    pthread_mutex_lock(&buffer_parola.lock);
    while(&buffer_parola.pieno==0);
    pthread_cond_wait(&buffer_parola.C, &buffer_parola.lock);
    printf("sono sveglio\n");
    
    printf("%s\n",buffer_parola.buffer);
    printf("\n\n");
    pthread_mutex_unlock(&buffer_parola.lock);
    buffer_parola.pieno=0;
    }
    
    
    void *inserisci(void *data){ 
    pthread_mutex_lock (&buffer_parola.lock); 
    printf("inserisci una parola \n");
    scanf("%s",buffer_parola.buffer);
    /* risveglia eventuali thread (consumatori) sospesi */
    buffer_parola.pieno=1;
    pthread_cond_signal (&buffer_parola.C);
    pthread_mutex_unlock (&buffer_parola.lock);
    
    }
    
    
    
    
Devi accedere o registrarti per scrivere nel forum
3 risposte