Разница между-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 появляется во время связывания, при предварительной обработке не будет никакого влияния.