В Linux (ядро 2.6.5) наша система сборки вызывает gcc с -D_REENTRANT
.
Требуется ли это по-прежнему при использовании pthreads
?
Как это связано с опцией gcc -pthread
? Я понимаю, что я должен использовать -pthread
с pthreads, мне все еще нужно -D_REENTRANT
?
Кстати, есть ли разница между использованием REENTRANT между gcc 3.3.3 и gcc 4.x.x?
Когда я использую опцию -pthread
gcc, я вижу, что _REENTRANT
определяется. Будет ли пропуск -D_REENTRANT
из командной строки иметь какое-то значение, например, могут ли некоторые объекты быть скомпилированы без многопоточной поддержки и затем связаны в двоичный файл, который использует pthreads и вызовет проблемы?
Я предполагаю, что все должно быть в порядке, просто использовать: g++ -pthread
> echo | g++ -E -dM -c - > singlethreaded
> echo | g++ -pthread -E -dM -c - > multithreaded
> diff singlethreaded multithreaded
39a40
> #define _REENTRANT 1
Мы собираем несколько статических библиотек и приложений, которые связываются со статическими библиотеками, и библиотеки, и приложения используют pthreads.
Я считаю, что это требовалось на каком-то этапе в прошлом, но я хочу знать, требуется ли оно до сих пор. Google не вернул ни одной недавней информации, упоминающей - D_REENTRANT
с pthreads
. Не могли бы вы указать мне ссылки или ссылки, обсуждающие использование в последней версии kernel / gcc / pthread ?
Уточнение: в настоящее время мы используем -D_REENTRANT и -lpthread, я предполагаю, что могу заменить их просто g ++ -pthread, глядя на man gcc, он устанавливает флаги для препроцессора и компоновщика. Есть мысли?