Fórum Ubuntu CZ/SK

Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: skacpprskac 23 Prosince 2011, 11:04:45

Název: Chybějící knihovna???
Přispěvatel: skacpprskac 23 Prosince 2011, 11:04:45
Zdravim,

nainstaloval jsem is do NB pres Wubi Ubuntu. Pri prekladu mam problem, vyhodi mi to hlasky:

Kód: [Vybrat]
/tmp/ccGfeYJl.o: In function `main':
thread_add_mutex.c:(.text+0xdc): undefined reference to `pthread_create'
thread_add_mutex.c:(.text+0x129): undefined reference to `pthread_create'
thread_add_mutex.c:(.text+0x16c): undefined reference to `pthread_join'
thread_add_mutex.c:(.text+0x1af): undefined reference to `pthread_join'
collect2: ld returned 1 exit status

Zkousel jsem to na jinem PC, pres WMvare a tam to slo v poho.

Tady je program ktery chci prelozit:

Kód: [Vybrat]
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>

#define ITERATIONS 1000000 milionu

int count = 0;

time_t start_time;

/* deklarace a staticka inicializace mutexu (nelze pouzit v dobe behu) */
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;


/* ceka do zmeny casu na novou sekundu -- nejvyse jednu sekundu */
static void wait_thread(void)
{
while (time(NULL) == start_time) {
/* do nothing except chew CPU slices for up to one second */
}
}

void *ThreadAdd(void *arg)
{
int i, tmp;
wait_thread(); /* cekani na preklopeni casu na novou sekundu */

for (i = 0; i < ITERATIONS; i++) {
/* VSTUPNI SEKCE */
if (pthread_mutex_lock(&mutex)) { /* wait */
perror("pthread_mutex_lock");
exit(EXIT_FAILURE);
}
/* KRITICKA SEKCE */
tmp = count; /* copy the global count locally */
tmp = tmp + 1; /* increment the local copy */
count = tmp; /* store the local value into the global count */
/* VYSTUPNI SEKCE */
if (pthread_mutex_unlock(&mutex)) { /* signal */
perror("pthread_mutex_unlock");
pthread_exit(NULL);
}
}
return NULL;
}

int main(int argc, char *argv[])
{
pthread_t tid1, tid2;

start_time = time(NULL);

/* alternativni inicializace mutexu v dobe behu */
/* pthread_mutex_init(&mutex, NULL); */ 
/* spusteni dvou vlaken */
if (pthread_create(&tid1, NULL, ThreadAdd, NULL)) {
fprintf(stderr, "ERROR creating thread 1\n");
return EXIT_FAILURE;
}
if (pthread_create(&tid2, NULL, ThreadAdd, NULL)) {
fprintf(stderr, "ERROR creating thread 2\n");
return EXIT_FAILURE;
}

/* cekani na dokonceni vlaken */
if (pthread_join(tid1, NULL)) { /* ceka na dokonceni prvniho vlakna */
fprintf(stderr, "ERROR joining thread 1\n");
return EXIT_FAILURE;
}
if (pthread_join(tid2, NULL)) { /* wait for the thread 2 to finish */
fprintf(stderr, "ERROR joining thread 2\n");
return EXIT_FAILURE;
}

/* uvolneni systemovych prostredku sdruzenych s mutexem, uvolneni pameti */
if (pthread_mutex_destroy(&mutex)) {
perror("pthread_mutex_destroy");
exit(EXIT_FAILURE);
}

/* kontrola vysledku */
if (count < 2 * ITERATIONS)
fprintf(stderr, "BOOM! count is %d, should be %d\n", count,
2 * ITERATIONS);
else
printf("OK! count is %d\n", count);

pthread_exit(NULL);
}

Vubec nevim co s tim. Dik moc za kazdou radu.
Název: Re:Chybějící knihovna???
Přispěvatel: premet 23 Prosince 2011, 14:39:31
Použij při kompilaci -lpthread
Název: Re:Chybějící knihovna???
Přispěvatel: skacpprskac 23 Prosince 2011, 14:49:45
Prekladam to takto:

Kód: [Vybrat]
gcc -lpthread -o mutex thread_add_mutex.c