gcc pthread'e bağlantı kuramıyor mu?


17

Son zamanlarda XUbuntu 11.10 64bit yükledim, ancak en basit pthread örneğini derlerken sorun yaşıyorum.

İşte kod 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); 
}

Ve burada derleme komutu

gcc -lpthread pthread_simple.c

Sonuçlar:

lptang @ tlp-linux: ~ / test / test-pthread $ gcc -lpthread pthread_simple.c 
/tmp/ccmV0LdM.o: `main 'işlevinde:
pthread_simple.c :(. metin + 0x2c): `` pthread_create '' için tanımsız referans
pthread_simple.c :(. text + 0x46): `` pthread_create '' için tanımsız referans
pthread_simple.c :(. metin + 0x57): `` pthread_join '' için tanımsız referans
pthread_simple.c :(. metin + 0x68): `` pthread_join '' için tanımsız referans
collect2: ld 1 çıkış durumu döndürdü

Soruna neyin sebep olduğunu bilen var mı?


İlk iki satırda boş eklentileriniz olması stackexchange'in hatası mı? Bir#include <pthread.h>
Frg

Evet, ön ortamı kullandım. Şimdi doğru bir şekilde görüntülenmelidir.
chtlp


BTW, lütfen derleyin -Wall, üstbilgileri kaçırıyorsunuz. (Ve sr_ doğrudur.)
Mat

Yanıtlar:


26

gccDerleyicinin en son sürümlerinde kitaplıkların nesne veya kaynak dosyalarını izlemesini gerektirir.

Yani bunu derlemek için:

gcc pthread_sample.c -lpthread

Normalde pthread kodu şu şekilde derlenmiş olsa da:

gcc -pthread pthread_sample.c

1
@Karlson Lütfen gcc'nin pthread.hreferansları çözmesi için neden sadece dosya eklemenin yeterli olmadığını açıklayabilir misiniz ?
Quazi Irfan

2
@iamcreasy Çünkü bildirim tanımla aynı değil. Program, belirli bir işlevi yürüten kodun nerede olduğunu bilmelidir.
Karlson


0

Aşağıdaki komutu kullanarak kodu derleyin

gcc filename.c -lpthread -lrt

1
Selam! Cevabınızın neden işe yaradığını açıklamak ve neden kabul edilmiş cevabın kapsamadığı bir şey eklediğini düşündüğünüzü vurgulamak yararlı olabilir.
dhag
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.