Значение флага -pthread при компиляции - PullRequest
135 голосов
/ 24 января 2010

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

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

Ответы [ 2 ]

102 голосов
/ 24 января 2010

Попробуйте:

gcc -dumpspecs | grep pthread

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

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

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

37 голосов
/ 24 января 2010

С man gcc:

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

...