In various multi threaded C and C++ projects I\'ve seen the -pthread flag applied to both the compiling and linking stage while others don\'t use it at all and
Try:
gcc -dumpspecs | grep pthread
and look for anything that starts with %{pthread:.
On my computer, this causes files to be compiled with -D_REENTRANT, and linked with -lpthread. On other platforms, this could differ. Use -pthread for most portability.
Using _REENTRANT, on GNU libc, changes the way some libc headers work. As a specific example, it makes errno call a function returning a thread-local location.
From man gcc:
-pthread Adds support for multithreading with the pthreads library. This option sets flags for both the preprocessor and linker.