Мы пишем этот оператор при компиляции C-программы, в которой реализованы потоки. Я не мог понять, почему мы здесь используем -D_REENTRANT. например gcc t1.c -lpthread -D_REENTRANT
Почему мы пишем -D_REENTRANT при компиляции кода C с помощью потоков
ответ
Вам не нужно его писать. Но это рекомендуется.
Defining _REENTRANT
заставляет компилятор использовать поточно-безопасные (то есть повторные) версии нескольких функций в библиотеке C.
На самом деле, рекомендуемый способ компиляции с потоками в GCC использует опцию -pthread
. Это эквивалентно -lpthread -D_REENTRANT
, поэтому у вас нет проблем.
флаги сделать следующее:
-lpthread
инструктирует компоновщик использовать соответствующие версии библиотек для совместимости потоков.-D_REENTRANT
сообщает компилятору использовать декларации (функции, типы, ...), необходимые для использования потоков.
Составители как gcc
использовать -D
name
предопределить name
как макрос с определением 1
.
В исходный код программы и файлы заголовков, вы увидите директивы компилятора, которые проверяют _REENTRANT
и делает что-то, когда этот макрос true
или 1
.
Если этот макрос не передан компилятору, то директива компилятора _REENTRANT
будет false
или 0
.
Возьмите этот пример из /usr/include/features.h.
#if defined _REENTRANT || defined _THREAD_SAFE
# define __USE_REENTRANT 1
#endif
Вы увидите, что он сообщает компилятору, что делать, если задан _REENTRANT.
И, наконец, вы должны связать ваш код с записями pthread
, чтобы вы могли использовать pthread_*()
семье, как pthread_create()
, pthread_join()
.
Когда -lpthread
передан в компоновщик, код связан с libpthread.so
.
- 1. Почему мы пишем окно.?
- 2. Почему мы пишем тестовые примеры?
- 3. Почему мы всегда должны читать последний элемент, который мы пишем с помощью C-соединений?
- 4. Почему мы пишем A.charAt (i), но не A.charAt [i]? И почему мы пишем «-« А »?
- 5. Почему мы пишем «-> Пустота» в Swift?
- 6. JQuery - Почему мы пишем .attr («выбрана», «выбран») с выбором тегом
- 7. ошибка компиляции при компиляции кода C++
- 8. Зачем мы пишем Синхронизированный (ClassName.class)
- 9. Ошибки при компиляции кода C
- 10. ISO C++ Ошибки при компиляции кода C
- 11. Почему мы собираем файлы «.XML.OLD» при компиляции?
- 12. Исключение при компиляции кода с помощью JavaCPP?
- 13. Нужно ли мне -D_REENTRANT с -pthreads?
- 14. Использование потоков boost при компиляции с/clr
- 15. Почему мы пишем lo + (hi-lo)/2 в бинарном поиске?
- 16. XCode Проблема при компиляции кода C
- 17. Почему мы пишем n/= 10 в программе armstorng?
- 18. Почему мы пишем out.println() в jsp вместо System.out.println()?
- 19. В Android Intent почему мы пишем ActivityTwo.class во втором аргументе?
- 20. Почему синтаксис привязки Различается, когда мы пишем во вложенном XAML
- 21. Почему GCC не использует больше регистра при компиляции кода C
- 22. Ошибка с memset при компиляции кода C++ для потоков в android ndk
- 23. C2113 Ошибка при компиляции кода C
- 24. Ошибка при компиляции кода
- 25. Что действительно делает gcc -D_REENTRANT?
- 26. Ошибка при компиляции кода «double free or corrupt (out)» с использованием потоков в C?
- 27. Неопределенная ссылка при компиляции кода C
- 28. ошибка при компиляции кода
- 29. iostream.h ошибка при компиляции кода C
- 30. Что именно происходит, когда мы пишем window.open()?
Возможный дубликат [Что такое флаг \ _REENTRANT?] (Http://stackoverflow.com/questions/2601753/what-is-the-reentrant-flag) – Calimo