The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"pthread меня задолбал!"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"pthread меня задолбал!"
Сообщение от David emailИскать по авторуВ закладки on 14-Мрт-02, 21:32  (MSK)
Помогите! Скажите, что не так? Система 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.
Кто-нибудь может мне объяснить, что это за бред? Вроде бы все библиотеки соответственно ману включил.
Наверняка с этим кто-нить сталкивался. Не обязательно для этих библиотек. Подскажите плиз, как с этим бороться. Очень надо! Не может же быть, что стандартная библиотека была глючной.
Заранее большое спасибо за помощь.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "RE: pthread меня задолбал!"
Сообщение от Soldier Искать по авторуВ закладки on 15-Мрт-02, 08:11  (MSK)
>Помогите! Скажите, что не так? Система
>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 -o prog prog.c -lpthread

Ili kak tam eta lib-a nazivaetsya.


P.S. Mozhet luchshe snachala nemnogo izuchit' veschi bolee prostie chem thread-i? ;-)


  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "RE: pthread меня задолбал!"
Сообщение от David emailИскать по авторуВ закладки on 15-Мрт-02, 12:34  (MSK)
>gcc -o prog prog.c -lpthread
Я работаю в Kdevelop, по идее он же всё это сам должен делать. Ведь на другие библиотеки, типа iostream, string, socket..., он так не ругается
>P.S. Mozhet luchshe snachala nemnogo izuchit'
>veschi bolee prostie chem thread-i?
>;-)
Например? Как ещё можно написать многопоточную программу, если не подходят процессы? К тому же с потоками я из виндов знаком, мне просто надо понять, чего я не дописал. Раньше у меня случались подобные ошибки, но это было из-за того, что я недовключал нужные библиотеки.

Тут дело не в том, что библиотека не включается, потому что если я для проверки передаю функциям неправильный тип, то они ругаются, что тип параметров неправильный, и даже виду не подают, что на них андефайнд референс.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "RE: pthread меня задолбал!"
Сообщение от Арлекин Искать по авторуВ закладки on 15-Мрт-02, 13:32  (MSK)
> iostream, string,..
они стандартные,  "потому и не кусают".
> socket
в соляре с ним надо цеплять аж две либы, в бсде может и нет. Короче - СОЛДАТ прав: смотри man ...pthread.. в своей системе, там, в самых первых строчках указано какой -l<lib> подключать.
ЗЫ: Забудь о чем-либо виндозном, работая в *nix'ах. Может быть ОЧЕНЬ ПОХОЖЕ, но никто и никогда не будет гарантировать что будет так как ты привык.
  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "Насчет параметров"
Сообщение от Арлекин Искать по авторуВ закладки on 15-Мрт-02, 13:38  (MSK)
Типы передаваемых параметров проверяет компилер, потому и ругается. Они прописаны в хидерах. А кросс-референсы связывает линкер, из объетных модулей. И директива -l<lib> относится к линкеру - он знает в какой либе искать объектники вызванных тобой функций.
  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "Большое спасибо."
Сообщение от David emailИскать по авторуВ закладки on 15-Мрт-02, 14:20  (MSK)
Спасибо, что научили. Единственное, что параметр нужно задавать не -lpthread, а просто -pthread.
  Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "RE: Большое спасибо."
Сообщение от Soldier Искать по авторуВ закладки on 15-Мрт-02, 14:47  (MSK)
>Спасибо, что научили. Единственное, что параметр
>нужно задавать не -lpthread, а
>просто -pthread.

Dlya pthread  mozhno i tak i etak, a vot s ostal'nimi lib-ami etot focus vryadli proydet. ;-).

  Рекомендовать в FAQ | Cообщить модератору | Наверх

7. "RE: Большое спасибо."
Сообщение от Арлекин Искать по авторуВ закладки on 15-Мрт-02, 15:16  (MSK)
В д.с. -pthread это не указание на подключение конкретной либы, а ключ, указывающий линкеру на то, что задача pthread-ориентированная, иначе говоря - указание как размещать модули в исполнимом файле и т.д. Видимо ЭТОТ линкер и сам знает, где и какие либы взять. Смысл директивы -l<lib> от этого не изменился.

Успехов.

ЗЫЖ Может еще оказаться, что абсолютно равносильно, указать -lpthread или -pthread, а то и оба сразу. В последнем случае линкер, видимо, вякнет, что он кого-то проигнорил.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

8. "RE: Большое спасибо."
Сообщение от David emailИскать по авторуВ закладки on 15-Мрт-02, 19:12  (MSK)
Дело в том, что когда я указал -lpthread, он сказал: "can't find lpthread in ..."
Потом я посмотрел ман, и там в самом начале увидел "-pthread" и решил попробовать.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

9. "Оказывается, что это особенность FreeBSD."
Сообщение от David emailИскать по авторуВ закладки on 15-Мрт-02, 19:19  (MSK)
Меня тут только что просветили, что то, что нужно использовать -pthread вместо -lpthread - это фича, свойственно именно FreeBSD. Так что ман не соврал :)
Всем удачи.
  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру