Разница между-pthread и-lpthread при компиляции
в чем разница между gcc -pthread
и gcc -lpthread
который используется при компиляции многопоточных программ?
2 ответов
-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
выбор.
Примечание: задокументирован как параметр платформы в документах GCC, поэтому он не всегда может быть доступен. Однако он доступен на платформах, для которых документы GCC явно не перечисляют его (например, i386 и x86-64) - вы должны использовать его, когда он доступен.
также обратите внимание, что другие аналогичные параметры были использованы GCC, такие как -pthreads
(указан как синоним для -pthread
на Солярисе 2) и -mthread
(для MinGW-специфического потока поддержка на i386 и x86-64 Windows). Я понимаю, что GCC пытается перейти к использованию -pthread
равномерное движение вперед.
-pthread
добавлена поддержка многопоточности с библиотекой pthreads. Этот параметр задает флаги как для препроцессора, так и для компоновщика (man gcc
).
пока
-lpthread
появляется во время связывания, при предварительной обработке не будет никакого влияния.