Peguei a seguinte demonstração na Web em https://computing.llnl.gov/tutorials/pthreads/
#include <pthread.h>
#include <stdio.h>
#define NUM_THREADS 5
void *PrintHello(void *threadid)
{
long tid;
tid = (long)threadid;
printf("Hello World! It's me, thread #%ld!\n", tid);
pthread_exit(NULL);
}
int main (int argc, char *argv[])
{
pthread_t threads[NUM_THREADS];
int rc;
long t;
for(t=0; t<NUM_THREADS; t++){
printf("In main: creating thread %ld\n", t);
rc = pthread_create(&threads[t], NULL, PrintHello, (void *)t);
if (rc){
printf("ERROR; return code from pthread_create() is %d\n", rc);
exit(-1);
}
}
pthread_exit(NULL);
}
Mas quando eu o compilo na minha máquina (executando o Ubuntu Linux 9.04), recebo o seguinte erro:
corey@ubuntu:~/demo$ gcc -o term term.c
term.c: In function ‘main’:
term.c:23: warning: incompatible implicit declaration of built-in function ‘exit’
/tmp/cc8BMzwx.o: In function `main':
term.c:(.text+0x82): undefined reference to `pthread_create'
collect2: ld returned 1 exit status
Isso não faz sentido para mim, porque o cabeçalho inclui pthread.h
, que deve ter a pthread_create
função. Alguma idéia do que está errado?
c
linux
multithreading
pthreads
Ralph
fonte
fonte
-lc_r
), (c)-thread
ou-threads
ou outro, em vez de ou em adição a-lpthread
.-lpthread
é necessário durante a compilaçãoLDFLAGS= -pthread -lpthread
Respostas:
Até agora, as duas respostas a esta pergunta estão incorretas .
Para Linux, o comando correto é:
Em geral, as bibliotecas devem seguir fontes e objetos na linha de comando, e
-lpthread
não é uma "opção", é uma especificação de biblioteca. Em um sistema com apenaslibpthread.a
instalado,falhará ao vincular.
fonte
gcc term.c -lpthread
undefined reference to 'pthread_cancel'
eundefined reference to 'pthread_create'
erros. Me deparei com este post do SO e pensei em experimentar a resposta do Employed Russian. Abrimakesnortsam.sh
no VI e executei o comando:%s/lpthread/pthread/g
para substituir lpthread por pthread, para que ele usasse em-pthread
vez de-lpthread
compilar. Pude então compilar snortsam. Obrigado empregada russa!-pthread
às opções de criação do projeto -> Configurações do vinculador -> Outras opções do vinculador.no eclipse
propriedades-> c / c ++ Build-> configuração-> vinculador GCC C ++-> bibliotecas na parte superior adicionam "pthread"
fonte
Executando no terminal Linux, o que funcionou para mim foi compilar usando o seguinte comando (suponha que o arquivo c que eu quero compilar se chame test.c):
Espero que ajude alguém!
fonte
Para Linux, o comando correto é:
fonte
De maneira geral, ele fornece vários exemplos de comandos de compilação usados para códigos pthreads, listados na tabela abaixo, se você continuar lendo o seguinte tutorial:
https://computing.llnl.gov/tutorials/pthreads/#Compiling
fonte
Se você estiver usando o cmake, poderá usar:
Ou
fonte
Compile-o assim: gcc demo.c -o demo -pthread
fonte
Eu acredito que a maneira correta de adicionar
pthread
noCMake
é com o seguintefonte
No Visual Studio 2019, especifique
-pthread
nas páginas de propriedades do projeto em:Digite na
-pthread
caixa de texto.fonte
Você precisa usar a opção
-lpthread
com gcc.fonte
-lpthread
não é uma "opção", especifica uma biblioteca.você só precisa adicionar "pthread" nas propriedades => compilação do C / C ++ => vinculador do GCC C ++ => bibliotecas => parte superior "bibliotecas (-l)". é isso aí
fonte
verifique a página de manual e você receberá.
Compile e vincule com -pthread.
fonte
Em Anjuta, vá para o menu Build e, em seguida, configure Project. Na caixa Configurar opções, adicione:
Espero que ajude alguém também ...
fonte
Às vezes, se você usar várias bibliotecas, verifique a dependência da biblioteca. (por exemplo, -lpthread -lSDL ... <==> ... -lSDL -lpthread)
fonte