Зачем вам нужен -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, среди прочего.

Другие вопросы по тегам