Erro: /tmp/ccOB6cIT.o: Na função 'main': exemplo.c :(. texto + 0x4a) [fechado]

1

Eu peguei o seguinte código de um arquivo de prática

#include <stdio.h>
#include <pthread.h>
void *kidfunc(void *p) 
{
printf ("Kid ID is ---> %d\n", getpid( ));
}
int main(int count, char* argv[])
{
pthread_t kid ;
pthread_create (&kid, NULL, kidfunc, NULL) ;
printf ("Parent ID is ---> %d\n", getpid( )) ;
pthread_join (kid, NULL) ;
printf ("No more kid!\n") ;
return 0;
}

Mas quando eu compilo no meu laptop (rodando o Ubuntu 14.04) ele gera o seguinte erro:

ahsan-15f8116@VirtualWorld:~$ gcc example.c
/tmp/ccOB6cIT.o: In function 'main':
example.c:(.text+0x4a): undefined reference to 'pthread_create'
example.c:(.text+0x71): undefined reference to 'pthread_join'
collect2: error: ld returned 1 exit status

Isso não faz sentido para mim, porque o cabeçalho inclui pthread.h , você pode me dizer o que estou fazendo de errado aqui?

    
por Weaboo 09.04.2017 / 15:10

2 respostas

3

Cabeçalhos declare funções, são bibliotecas que definem elas.

Normalmente, você precisaria adicionar bibliotecas para serem vinculadas explicitamente na linha de comando gcc , por exemplo, gcc -o prog prog.c -lm para a biblioteca de matemática libm . No entanto, a biblioteca pthread é um caso especial - ela é vinculada por um sinalizador de compilador especial -pthread :

gcc -pthread example.c

De man gcc

-pthread
    Adds support for multithreading with the pthreads library.  This
    option sets flags for both the preprocessor and linker.
    
por steeldriver 09.04.2017 / 15:23
2

Simples ... use libpthread.so:

$ gcc -o EXAMPLE -lpthread example.c

$ ./EXAMPLE
Parent ID is ---> 9280          
Kid ID is ---> 9280             
No more kid!
    
por Knud Larsen 09.04.2017 / 15:24