библиотека pthread неопределенная ссылка [дубликат]
На этот вопрос уже есть ответ здесь:
Я использую eclipse на Fedora 17 (с GCC), и у меня есть неопределенная ссылка на pthread_create (), даже если pthread.h включен, и если у меня есть-lpthread в командной строке сборки gcc...
Вот мой код, на всякий случай
void* repair()
{
int var;
for ( var = 0; var < NB_ITER ; var += 2 )
{
printf( "PAIR : %dn", var );
}
return NULL;
} // pair
void exo03()
{
pthread_t id1;
pthread_create(&id1, NULL, &repair, NULL);
}
Спасибо за помощь :)
2 ответа:
В linux, FreeBSD (и некоторых других вариантах *nix) вы должны использовать опцию компилятора
-pthread
и не пытаться установить связь с библиотекой pthread.Для затмения:
Eclipse не настроен для размещения аргумента-pthread в gcc сборник. Чтобы решить эту проблему, перейдите в меню:
Проект - > Свойства
Сборка C/c++ - > компилятор GCC C - > разное
Добавьте аргумент"- pthread " в начало "других флагов"
Также перейдите к:
Сборка C/c++ - > настройки - > Компоновщик GCC C - > библиотеки
И включить библиотеку "pthread" в другие библиотеки. Нажмите кнопку Применить и перестроить проект. Теперь птриды должны работать.
От man gcc :
- pthread: добавлена поддержка многопоточности с помощью библиотеки pthreads. Этот параметр устанавливает флаги как для препроцессора, так и для компоновщика.
Я нашел здесь объяснение :
В GCC параметр -pthread (он же-pthreads) управляет обоими компиляторами препроцессор /и / компоновщик для включения компиляции с потоками Posix. Препроцессор будет определять / включать / использовать версии потоков Posix для некоторых макросы (или выполнение условной компиляции для включения потоков Posix логика), и компоновщик будет специально связывать результирующий объект против libpthread
Тем не менее, -lpthread просто говорит компоновщику попытаться решить любую внешний ссылки на библиотеку libpthread, таким же образом что -лм указывает компоновщику, чтобы попытаться устранить любые внешние ссылки на библиотеку libm. Для -lpthread, ваш код может не содержит внешних ссылок на libpthread, даже если вы написали Posix потоковый код, потому что критические макросы не были включены.