Вопрос по pthreads, linux, c, c++ – Значение флага -pthread при компиляции

133

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

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

Ваш Ответ

2   ответа
36

man gcc

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

101

Пытаться:

gcc -dumpspecs | grep pthread

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

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

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

@Pascal: Спасибо за ссылку. В данный момент он стоит немного выше моей головы, но, похоже, центральным моментом является то, что многопоточность не может быть простоприкрепленный, но вместо этого должны быть разработаны как часть модели памяти. Я полностью согласен с этим. Chris Jester-Young
Как я могу найти, если проекту нужен-pthread флаг? user2023370
Я знаю, как это можно сделать, чтобы работать. Я просто возился с примером, который неверен (по крайней мере) в Ubuntu 9.10, что подтверждается проверкой сгенерированной сборки. Насколько я могу судить, типичная сборка glibc рассматривает -pthread как синоним с -lpthread. Andy Ross
Там'Здесь все еще остается вопрос, на который не дан ответ: есть ли опасность не компилировать и связывать с флагом -pthread - то есть, что на самом деле делает -pthread? natenho

Похожие вопросы