LINUX.ORG.RU

pthread во FreeBSD меня задолбал!


0

0

Помогите! Скажите, что не так? Система FreeBSD 4.4. Элеметнарная тестовая прога:

#include <pthread.h>

int main(int argc, char *argv[]) {   pthread_mutexattr_t attr;   pthread_mutex_t mutex;

  pthread_mutexattr_init(&attr);   pthread_mutex_init(&mutex, &attr);   pthread_mutex_lock(&mutex);   pthread_mutex_unlock(&mutex);

  return 0; }

На это компилятор отвечает: undefined reference to 'pthread_mutexattr_init' и так на каждую функцию из библиотеки ругается. Причём это касается не только мьютексов, но и других функций из этой библиотеки, а также из semaphore.h. Кто-нибудь может мне объяснить, что это за бред? Вроде бы все библиотеки соответственно ману включил. Наверняка с этим кто-нить сталкивался. Не обязательно для этих библиотек. Подскажите плиз, как с этим бороться. Очень надо! Не может же быть, что стандартная библиотека была глючной. Заранее большое спасибо за помощь.


Наверное задефайнить забыл что-то: gcc -D_REENTRANT -D_GNU_SOURCE

Если не помогло - дай весь вывод и как ты его компилиш...

Good Luck!

tvn
()

Я в Kdevelop работаю. Разве он не должен сам этого делать? Ведь другие библиотеки, типа socket, iostream, string..., работают без проблем. Кстати, может на что-нибудь влиять то, что прога С++, а не С? Насколько я понимаю - нет. Или я не прав?

David
() автор топика

2David (*) (2002-03-15 10:53:01.0)

>Ведь другие библиотеки, типа socket, iostream, string..., работают без проблем.

А им и не нужны дополнительные либы:)

И неважно С или С++ - все работает когда правильно задаеш опции, да чуть не забыл а либа линкуется? (-lpthread) ;)

Good Luck!

tvn
()

На FreeBSD надо вызывать g{cc,++} с опцией -pthread (не -lpthread, как на других системах).

Из FreeBSDшного мана по gcc:
-pthread
Link a user-threaded process against libc_r instead
of libc. Objects linked into user-threaded process-
es should be compiled with -D_THREAD_SAFE.

bison
()
Ответ на: комментарий от bison

Спасибо!

Да, я именно так и сделал. Всё получилось. Спасибо всем большое за участие.

David
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.