The OpenNET Project / Index page

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




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

  • RE: pthread меня задолбал!, !*! Soldier, 08:11 , 15-Мрт-02 (1)
    >Помогите! Скажите, что не так? Система
    >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? ;-)

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

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

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

        • Насчет параметров, !*! Арлекин, 13:38 , 15-Мрт-02 (4)
          Типы передаваемых параметров проверяет компилер, потому и ругается. Они прописаны в хидерах. А кросс-референсы связывает линкер, из объетных модулей. И директива -l<lib> относится к линкеру - он знает в какой либе искать объектники вызванных тобой функций.
          • Большое спасибо., !*! David, 14:20 , 15-Мрт-02 (5)
            Спасибо, что научили. Единственное, что параметр нужно задавать не -lpthread, а просто -pthread.
            • RE: Большое спасибо., !*! Soldier, 14:47 , 15-Мрт-02 (6)
              >Спасибо, что научили. Единственное, что параметр
              >нужно задавать не -lpthread, а
              >просто -pthread.

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


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

              Успехов.

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




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

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