2017-01-02 11 views
-1

Я начинаю с многопоточного программирования, используя gcc под Debian 8. Я успешно написал и запустил многопоточное тестовое приложение (foobar.c), но меня смущает Makefile (скопированный из примера). В частности, команда, которая работает, -аргументы gcc: -pthread. Что оно делает?

gcc foobar.c -o foobar -pthread 

Я смущен «-pthread». заключается в том, что

(a) вариант «-p» со значением «thread» или
(b) аргумент «-pthread»?

если любой случай, что это действительно делает? Включая библиотеку? Включая какой-то объект? Настройка другого варианта?

BTW - Аналогичный вопрос 15929739 был задан, но не ответил. Вопрос 20924412 тоже не помог.

+0

Отношения d: http://stackoverflow.com/q/23250863/694576 – alk

ответ

2

От man page:

-pthread
Добавлена ​​поддержка многопоточности с библиотекой Pthreads. Эта опция устанавливает флаги как для препроцессора, так и для компоновщика.

Чтобы быть конкретными, а НКУ 6.2.1, -pthread будет:

  • #define _REENTRANT 1
  • Добавить -lpthread линковать libpthread

Как я знаю, вы спросите ?

Какие флаги для препроцессора добавлены?

Давайте dump the preprocessor defines и сравнить их:

$ diff <(gcc -dM -E - < /dev/null) <(gcc -pthread -dM -E - < /dev/null) 
> #define _REENTRANT 1 

Какие линкер варианты добавлены?

Давайте dump the ld options passed by GCC и сравнить их:

diff <(gcc -### -o foo empty.c 2>&1) <(gcc -### -pthread -o foo empty.c 2>&1) 

Выход здесь немного более многословным, но если мы будем игнорировать временные различия имен файлов, мы находим:

  • -lpthread
  • "-plugin-opt=-pass-through=-lpthread"
+0

Да, я вижу это, но все еще неясно. Что определено для препроцессора? Что связано? Извините за то, что я такой манекен. – DontPanic

+0

Надеюсь, мои правки ответят на ваш вопрос. –