PDA

Visualizza la versione completa : Gestione thread linux in C


fraenk
08-11-2004, 22:43
Perchè non mi compila il seguente programma???



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

#define MAX_CHAR 1000
#define MAX_STRING 1000

int string_number=0;
char * string_array[MAX_STRING];
int status;

void * OrderThread(void * new_string)
{
int i,j;

//printf("Ordering thread active\n");
for (i=0 ; i < string_number; i++) {
if (strcmp(new_string,string_array[i]) <= 0) {
for (j=0; j<(string_number-i); j++) {
string_array[string_number - j] = string_array[string_number - j - 1];
}
break;
}
}
string_array[i] = new_string;
string_number++;
status = 0;
pthread_exit((void *)&status);
}

main ()
{
int i;
pthread_t tid;
char * old_buffer;
void * status;
char buffer[MAX_CHAR];
int notfirst = 0;

while(1) {
printf("Inserisci stringa: ");
scanf("%s", buffer);
if (strcmp(buffer, "quit") == 0) break;
old_buffer = strdup(buffer);
if (notfirst) pthread_join(tid, &status);
else notfirst = 1;
i=pthread_create(&tid, NULL, OrderThread, (void *)old_buffer);
if (i) {
printf("cannot create thread for error %d\n", i);
exit(-1);
}
}
pthread_join(tid, &status);
for (i=0; i< string_number; i++) printf("String %d: %s\n", i,string_array[i]);
exit(0);
}


Immagino che il problema sarà una cavolata ma non capisco perchè mi da l'undefined reference to pthread_join e pthread_create!! Sono ancora alle prime armi con C!!

internet
09-11-2004, 01:59
E' un problema di linking, infatti lo deduci dal tipo di errore "undefined reference".

infatti se compili

gcc -c main.c

non dovrebbe dare alcun errore, la fase di link richiede che gli indichi dove trovare quella funzione

gcc -o main main.o -lpthread

volendo puoi (se il progetto è di un solo file) compilare e linkare direttamente

gcc -o main main.c -lpthread

fraenk
09-11-2004, 13:47
Infatti il problema era proprio quello!!!

Grazie mille!!!

Purtroppo sono davvero alle prime armi sia con il linguaggio C che con linux ed entro dicembre devo (a questo punto "dovrei") consegnare una tesina di sistemi operativi abbastanza incasinata!!
Non so proprio dove mettere le mani...uff... :dhò: :dhò:

Beh, grazie ancora dell'aiuto!!

Loading