- 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, а то и оба сразу. В последнем случае линкер, видимо, вякнет, что он кого-то проигнорил.
- RE: Большое спасибо., David, 19:12 , 15-Мрт-02 (8)
Дело в том, что когда я указал -lpthread, он сказал: "can't find lpthread in ..." Потом я посмотрел ман, и там в самом начале увидел "-pthread" и решил попробовать.
- Оказывается, что это особенность FreeBSD., David, 19:19 , 15-Мрт-02 (9)
Меня тут только что просветили, что то, что нужно использовать -pthread вместо -lpthread - это фича, свойственно именно FreeBSD. Так что ман не соврал :) Всем удачи.
|