Значение флага -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 библиотека. Эта опция устанавливает флаги как для препроцессора, так и для компоновщика.