В различном многопоточном C и проектах C++ я видел -pthread
флаг относился и к компиляции и к соединению этапа, в то время как другие не используют его вообще и просто передают -lpthread
к связывающемуся этапу.
Есть ли любая опасность, не компилирующая и связывающаяся с -pthread
флаг - т.е. что делает -pthread
на самом деле? Я, прежде всего, интересуюсь платформами Linux.
Попробуйте:
gcc -dumpspecs | grep pthread
и ищите что-нибудь, что начинается с %{pthread:
.
На моем компьютере это приводит к тому, что файлы компилируются с -D_REENTRANT
и связываются с -lpthread
. На других платформах это может отличаться. Для большинства переносимых платформ используйте -pthread
.
Использование _REENTRANT
в GNU libc меняет способ работы некоторых заголовков libc. В качестве конкретного примера, это заставляет errno
вызывать функцию, возвращающую локальное расположение потока.
Из MAN GCC
:
-PTHREAD Добавляет поддержку многопотативных с помощью Pthreads библиотека. Этот Опция устанавливает флаги как для препроцессора, так и для линкера.