Разница между -pthread и -lpthread при компиляции

В чем разница между gcc -pthread и gcc -lpthread которая используется при компиляции многопоточных программ?

    -pthread сообщает компилятору о связи в библиотеке pthread, а также настраивает компиляцию для streamов.

    Например, следующее показывает macros, которые определяются, когда опция -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 - предопределенные macros не определяются.

    Итог: вы должны использовать опцию -pthread .


    Примечание. -pthread задокументирован как специфичный для платформы параметр в документах GCC, поэтому он может быть не всегда доступен. Однако он доступен на платформах, которые в документах GCC явно не перечислены (например, i386 и x86-64) - вы должны использовать их, когда они доступны.

    Также обратите внимание, что другие аналогичные опции были использованы GCC, такие как -pthreads (перечислены как синоним для -pthread на Solaris 2) и -mthread (для поддержки streamов MinGW для i386 и x86-64 Windows). Я понимаю, что GCC пытается перейти к использованию -pthread равномерно в будущем.

    -pthread Добавляет поддержку многопоточности с помощью библиотеки pthreads. Эта опция устанавливает флаги как для препроцессора, так и для компоновщика ( man gcc ).

    в то время как

    -lpthread появляется, и при связывании не будет никакого влияния при предварительной обработке.

    Interesting Posts

    Изменить шрифт во время выполнения

    Как динамически изменять содержимое в iframe с помощью jquery?

    Выйти из общего сетевого диска без перезагрузки?

    Windows 10 не закрывается должным образом

    Ширина кнопок панели задач Windows

    Опционы Downcasting в Swift: как? Тип, или как! Тип?

    Добавление текста заполнителя в текстовое поле

    Являются ли аксессуары для охлаждения ноутбуков (колодки, внешние вентиляторы и т. Д.) Эффективны?

    не удалось запустить COM-объект типа «microsoft.Office.Interop.Excel.ApplicationClass» в «microsoft.Office.Interop.Excel.Application»

    Как получить первые n символов строки без проверки размера или выхода за пределы?

    Как локализовать приложение ASP.NET MVC?

    Как добавить переменную в Scala?

    Поверните несколько изображений PNG в анимацию 1280×720, закодированную в H264, для загрузки YouTube HD

    Не удается запустить отладку на веб-сервере. Не удалось запустить отладку ASP.NET VS 2010, II7, Win 7 x64

    ostream chaining, порядок вывода

    Давайте будем гением компьютера.