web-dev-qa-db-ja.com

gccはpthreadにリンクできませんか?

最近XUbuntu 11.10 64ビットをインストールしましたが、最も単純なpthreadサンプルのコンパイルに問題があります。

これがコード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); 
}

そして、これがコンパイルコマンドです

 gcc -lpthread pthread_simple.c 

結果:

 lptang @ tlp-linux:〜/ test/test-pthread $ gcc -lpthread pthread_simple.c 
/tmp/ccmV0LdM.o:関数 `main ':
 pthread_simple内。 c :(。text + 0x2c):「pthread_create」への未定義の参照
 pthread_simple.c :(。text + 0x46):「pthread_create」への未定義の参照
 pthread_simple.c :(。text + 0x57):「pthread_join」への未定義の参照
 pthread_simple.c :(。text + 0x68):「pthread_join」への未定義の参照
 collect2:ldは1終了ステータスを返しました

誰が問題の原因を知っていますか?

17
chtlp

gccの最新バージョンでは、コンパイラーはライブラリーがオブジェクトまたはソース・ファイルに従う必要があります。

これをコンパイルするには、次のようにする必要があります。

gcc pthread_sample.c -lpthread

通常、pthreadコードは次のようにコンパイルされますが:

gcc -pthread pthread_sample.c
27
Karlson
gcc -o exectable_namme pthread_sample.c -lpthread

次のコマンドを使用してコードをコンパイルします

gcc filename.c -lpthread -lrt
0
user109578