библиотека 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 5

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 потоковый код, потому что критические макросы не были включены.

Вы подключились к libpthread?

$> gcc ... -lpthread