マルチスレッドプログラムのコンパイル中に使用されるgcc -pthread
とgcc -lpthread
の違いは何ですか?
-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
を一様に使用することに移行しようとしています。
-pthread
pthreadsライブラリを使用したマルチスレッドのサポートを追加します。このオプションは、プリプロセッサとリンカの両方にフラグを設定します(man gcc
)。
ながら
-lpthread
は存在しますが、リンクしている間は前処理中に影響はありません。