Зачем вам нужен -lpthread?
Итак, мои вопросы: зачем вам нужен -lpthread в конце команды компиляции?
Почему работает эта команда:
gcc -o name name.c -lpthread
но этого не будет:
gcc -o name name.c
Я использую библиотеку pthread.h в своем коде C.
Я уже искал в Интернете некоторые ответы, но на самом деле не нашел ничего, что отвечало бы на них.
2 ответа
pthread.h
не библиотека, это просто файл заголовка, который дает вам объявление (а не фактическое тело функции) функций, которые вы будете использовать для многопоточности.
с помощью -libpthread
или -lpthread
при компиляции фактически связывает библиотеку GCC pthread
с вашим кодом. Следовательно, флаг компилятора,-libLIBRARY_NAME
или -lLIBRARY_NAME
необходимо.
Если вы не включили флаги -l
или -lib
с LIBRARY_NAME
вы не сможете использовать внешние библиотеки.
В этом случае, скажем, если вы используете функции pthread_create
а также pthread_join
, поэтому вы получите сообщение об ошибке:
undefined reference to `pthread_create'
undefined reference to `pthread_join'
В -l
options сообщает компоновщику ссылку на указанную внешнюю библиотеку, в данном случае библиотеку pthread.
Включение pthread.h позволяет вам использовать функции библиотеки pthread в вашем коде. Однако, в отличие от функций, объявленных в таких местах, как studio.h или stdlib.h, фактический код функций в pthread.h по умолчанию не связан.
Итак, если вы используете функции из этой библиотеки и не можете использовать -lpthread
, этап компоновки завершится неудачно, поскольку он не сможет найти функции в библиотеке, такие как pthread_create
, среди прочего.