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

最近XUbuntu11.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: 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 

誰か知っていますか? ” s問題の原因ですか?

コメント

  • スタックエクスチェンジ'の障害には空のインクルードが含まれています最初の2行に?#include <pthread.h>
  • はい、プリ環境を使用しました。正しく表示されるはずです。
  • gcc -pthread...を試しましたか?
  • ところで、-Wall、'ヘッダーがありません(sr_は正しいです)。

回答

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

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

gcc pthread_sample.c -lpthread 

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

gcc -pthread pthread_sample.c 

コメント

  • @Karlson pthread.hファイルを含めるだけではgccが参照を解決できない理由を説明できますか?
  • @iamcreasy宣言ではないため定義と同じです。プログラムは、特定の関数を実行するコードがどこにあるかを知る必要があります。

回答

gcc -o exectable_namme pthread_sample.c -lpthread 

コメント

  • 回答を編集して理由を説明すると便利ですこれは、すでに受け入れられている回答とは異なります。

回答

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

gcc filename.c -lpthread -lrt 

コメント

  • こんにちは!回答を編集して、それが機能する理由を説明し、すでに受け入れられている回答がカバーしていない何かを追加すると思う理由を強調できると便利です。'

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です