gcc não pode linkar para pthread?

14

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 está 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 que está causando o problema?

    
por chtlp 04.03.2012 / 14:14

3 respostas

22

Nas versões mais recentes do compilador gcc , é necessário que as bibliotecas sigam o objeto ou os arquivos de origem.

Então, para compilar isso, deve ser:

gcc pthread_sample.c -lpthread

Normalmente, o código pthread é compilado desta forma:

gcc -pthread pthread_sample.c
    
por 04.03.2012 / 14:45
1
gcc -o exectable_namme pthread_sample.c -lpthread
    
por 20.11.2015 / 11:50
0

código de compilação usando o seguinte comando

gcc filename.c -lpthread -lrt
    
por 08.04.2015 / 06:18