В чем разница между gcc -pthread
и gcc -lpthread
, которая используется при компиляции многопоточных программ?
Разница между -pthread и -lpthread при компиляции
Ответ 1
-pthread
сообщает компилятору ссылку в библиотеке pthread, а также настраивать компиляцию для потоков.
Например, ниже показаны макросы, которые определяются, когда опция -pthread
используется в пакете GCC, установленном на моей машине Ubuntu:
$ gcc -pthread -E -dM test.c > dm.pthread.txt
$ gcc -E -dM test.c > dm.nopthread.txt
$ diff dm.pthread.txt dm.nopthread.txt
152d151
< #define _REENTRANT 1
208d206
< #define __USE_REENTRANT 1
Использование опции -lpthread
только связывает библиотеку pthread - предопределенные макросы не определяются.
Нижняя строка: вы должны использовать опцию -pthread
.
Примечание. Параметр -pthread
задокументирован как специфичный для платформы вариант в документах GCC, поэтому он может быть не всегда доступен. Однако он доступен на платформах, которые в документах GCC явно не перечислены (например, i386 и x86-64) - вы должны использовать их, когда они доступны.
Также обратите внимание, что другие аналогичные опции были использованы GCC, например -pthreads
(указаны как синоним для -pthread
в Solaris 2) и -mthread
(для поддержки потоков MinGW для i386 и x86-64 Windows). Я понимаю, что GCC пытается перейти к использованию -pthread
равномерного продвижения вперед.
Ответ 2
-pthread
Добавляет поддержку многопоточности с помощью библиотеки pthreads. Эта опция устанавливает флаги как для препроцессора, так и для компоновщика (man gcc
).
а
-lpthread
существует, тогда как при связывании не будет никакого влияния при предварительной обработке.