web-dev-qa-db-ja.com

コンパイル中の-pthreadと-lpthreadの違い

マルチスレッドプログラムのコンパイル中に使用されるgcc -pthreadgcc -lpthreadの違いは何ですか?

92
Vishnuraj V

-pthreadは、pthreadライブラリにリンクするとともに、スレッドのコンパイルを構成するようコンパイラーに指示します。

たとえば、以下は、UbuntuマシンにインストールされたGCCパッケージで-pthreadオプションが使用されるときに定義されるマクロを示しています。

$ gcc -pthread -E -dM test.c > dm.pthread.txt
$ gcc          -E -dM test.c > dm.nopthread.txt
$ diff dm.pthread.txt dm.nopthread.txt 
152d151
< #define _REENTRANT 1
208d206
< #define __USE_REENTRANT 1

-lpthreadオプションを使用すると、pthreadライブラリのみがリンクされます-事前定義されたマクロは定義されません。

結論:-pthreadオプションを使用する必要があります。


注:-pthreadオプションは、GCCドキュメントにプラットフォーム固有のオプションとして文書化されているため、常に利用できるとは限りません。ただし、GCCドキュメントで明示的にリストされていないプラットフォーム(i386やx86-64など)で使用できます。使用可能な場合は使用する必要があります。

また、-pthreads(Solaris 2では-pthreadの同義語としてリストされている)や-mthread(i386でのMinGW固有のスレッドのサポートなど)など、他の同様のオプションがGCCによって使用されているx86-64 Windows)。私の理解では、GCCは-pthreadを一様に使用することに移行しようとしています。

104
Michael Burr

-pthread pthreadsライブラリを使用したマルチスレッドのサポートを追加します。このオプションは、プリプロセッサとリンカの両方にフラグを設定します(man gcc)。

ながら

-lpthreadは存在しますが、リンクしている間は前処理中に影響はありません。

8
Praveen Kumar