最近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問題の原因ですか?
コメント
回答
緯度で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
コメント
- こんにちは!回答を編集して、それが機能する理由を説明し、すでに受け入れられている回答がカバーしていない何かを追加すると思う理由を強調できると便利です。'
#include <pthread.h>
gcc -pthread...
を試しましたか?-Wall
、'ヘッダーがありません(sr_は正しいです)。