2011-07-15 9 views
0

FedoraでマルチスレッドでCプログラムをコンパイルしようとすると、次のエラーが発生します。Fedoraでスレッドを使用してC関数をコンパイルする際の問題

ファイル名はIが、/ usr /含めると、私はpthread.hのが存在することを発見し、チェックイン

abc.c:(.text+0x39): undefined reference to `pthread_create' 
abc.c:(.text+0x61): undefined reference to `pthread_create' 
abc.c:(.text+0x79): undefined reference to `pthread_join' 
abc.c:(.text+0x8d): undefined reference to `pthread_join' 

abc.cです。また、pthread.hをabc.cと同じディレクトリにコピーしようとしました

これらのリンクエラーを解決するにはどうすればよいですか?

+5

gcc -o myexe abc.c -lpthread ??? – George

答えて

3

としては、あなたがスレッドライブラリとリンクしなければなりませんジョージによって指摘 のgcc -o ABC abc.c -pthread リンク段階中に、コンパイラはすべてのスロットどこに記入しようとするので、あなたがこれらのエラーを取得している理由は、適切なライブラリがまだリンクされていないため、定義されていたが現在は場所を知らないメソッド呼び出しのプレースホルダが配置されていました。コンパイルとリンクの両方の段階で-pthreadフラグを使用するcafによって指摘されているように、コンパイラは特定の条件でスレッドセーフであるために必要なものをよりスマートに選択できます。

+4

最近の使用法は、 '-pthread'をコンパイルとリンクの両方の段階(注 - ' -l'なし)に提供し、必要なライブラリがリンクしていることを要求します。これにより、コンパイラは、マルチスレッドコードの作成に合わせて、出力を他の方法で変更することもできます。 – caf

+0

私は通常、-pthreadフラグを指定しないでgcc -cをコンパイルしますが、リンクを行うときに-lpthreadを使用すると違いがありますか?コンパイル段階でpthreadを知っていれば最適化を追加できますね –

+0

私はそれがコンパイル段階でのオペレーションであるかどうかは、アーキテクチャとCライブラリの使用に依存すると思います。 – caf

関連する問題