gcc não pode ' vincular a pthread?

Eu instalei recentemente o XUbuntu 11.10 64bit, mas estou tendo problemas para compilar o exemplo mais simples de pthread.

Aqui está o código pthread_simple.c:

 #include <stdio.h> #include <pthread.h> main() { pthread_t f2_thread, f1_thread; void *f2(), *f1(); int i1,i2; i1 = 1; i2 = 2; pthread_create(&f1_thread,NULL,f1,&i1); pthread_create(&f2_thread,NULL,f2,&i2); pthread_join(f1_thread,NULL); pthread_join(f2_thread,NULL); } void *f1(int *x){ int i; i = *x; sleep(1); printf("f1: %d",i); pthread_exit(0); } void *f2(int *x){ int i; i = *x; sleep(1); printf("f2: %d",i); pthread_exit(0); }  

E aqui é o comando de compilação

 gcc -lpthread pthread_simple.c 

Os resultados:

 lptang@tlp-linux:~/test/test-pthread$ gcc -lpthread pthread_simple.c /tmp/ccmV0LdM.o: In function `main": pthread_simple.c:(.text+0x2c): undefined reference to `pthread_create" pthread_simple.c:(.text+0x46): undefined reference to `pthread_create" pthread_simple.c:(.text+0x57): undefined reference to `pthread_join" pthread_simple.c:(.text+0x68): undefined reference to `pthread_join" collect2: ld returned 1 exit status 

Alguém sabe o quê ” está causando o problema?

Comentários

  • É stackexchange ' s culpa de você ter inclusões vazias nas primeiras duas linhas? Deve haver um #include <pthread.h>
  • Sim, usei o ambiente anterior. Agora ele deve ser exibido corretamente.
  • Tentou gcc -pthread...?
  • BTW, compile com -Wall, você ' está faltando cabeçalhos. (E sr_ está correto.)

Resposta

Na latitude as versões est do gcc compilador exigem que as bibliotecas sigam o objeto ou os arquivos de origem.

Portanto, para compilar isso deve ser:

gcc pthread_sample.c -lpthread 

Normalmente, embora o código pthread seja compilado desta forma:

gcc -pthread pthread_sample.c 

Comentários

  • @Karlson Você pode explicar por que apenas incluir o arquivo pthread.h não é suficiente para o gcc resolver as referências?
  • @iamcreasy Porque a declaração não é o mesmo que definição. O programa precisa saber onde está o código que executa uma função específica.

Resposta

gcc -o exectable_namme pthread_sample.c -lpthread 

Comentários

Resposta

compilar o código usando o seguinte comando

gcc filename.c -lpthread -lrt 

Comentários

  • Olá! Seria útil se você pudesse editar sua resposta para explicar por que funciona e destacar por que acha que adiciona algo que a resposta já aceita não ' cobre.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *