Значение флага -pthread при компиляции

В различных многопоточных проектах на C и С++ я видел флаг -pthread, применяемый как для этапа компиляции, так и для компоновки, в то время как другие вообще не используют его и просто передают -lpthread на этап компоновки.

Есть ли опасность не компилировать и связывать с флагом -pthread - то есть что делает -pthread на самом деле? Меня в первую очередь интересуют платформы Linux.

Ответ 1

Try:

gcc -dumpspecs | grep pthread

и найдите все, что начинается с %{pthread:.

На моем компьютере это приводит к компиляции файлов с помощью -D_REENTRANT и привязывается к -lpthread. На других платформах это может различаться. Используйте -pthread для большей переносимости.

Использование _REENTRANT, в GNU libc, изменяет способ работы некоторых заголовков libc. В качестве конкретного примера он вызывает функцию errno для вызова функции, возвращающей локальное расположение потока.

Ответ 2

От man gcc:

-pthread            Добавляет поддержку многопоточности с помощью pthreads библиотека. Эта            опция устанавливает флаги как для препроцессора, так и для компоновщика.