1. ホーム
  2. multithreading

[解決済み] コンパイル時の-pthreadと-lpthreadの違いについて

2022-06-17 21:12:07

質問

とはどのような違いがあるのでしょうか? gcc -pthreadgcc -lpthread の2種類がありますが、これはマルチスレッドプログラムのコンパイル時に使用されるものですか?

どのように解決するのですか?

-pthread は、コンパイラに pthread ライブラリをリンクするように指示し、 スレッド用にコンパイルを設定します。

例えば、以下は -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 など) では、利用可能です - 利用可能な場合は、それを使うべきです。

また、他の似たようなオプションがGCCによって使われてきたことにも注意してください。 -pthreads (の同義語としてリストされている -pthread は Solaris 2 では同義語として挙げられています)、そして -mthread (i386とx86-64のWindowsでのMinGW固有のスレッドサポートのため)。私の理解では、GCC は -pthread を一律に使用するように移行しようとしていると理解しています。