В 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.
Я считаю, что это было необходимо на каком-то этапе в прошлом, но нужно знать, требуется ли это еще. Googling не возвратил никакой недавней информации - D_REENTRANT
с pthreads
. Не могли бы вы указать мне ссылки или ссылки, обсуждая использование в последней версии kernel/gcc/pthread?
Уточнение: В настоящий момент мы используем -D_REENTRANT и -lpthread, я предполагаю, что могу заменить их только g++ -pthread, глядя на человека gcc, который устанавливает флаги как для препроцессора, так и для компоновщика. Любые мысли?