undefined reference to pthread_mutex_trylock

Модератор: Модераторы разделов

Аватара пользователя
zensou
Сообщения: 16
ОС: Ubuntu 9.04

undefined reference to pthread_mutex_trylock

Сообщение zensou »

Компилю проект под g++ & Code::Blocks, в логе выводится ошибка:

Код: Выделить всё

obj/Debug/LGE_Mutex.o||In function `LGE::Mutex::tryLock()':|
/home/zensou/Desktop/LGE/LGE_Mutex.cpp|54|undefined reference to `pthread_mutex_trylock'

54 - это строка

Код: Выделить всё

int result = pthread_mutex_trylock(&mMutex);

Что интересно, если закоментить эту строку, то весь код компилится без ошибок (там еще много ф-ий из <phread.h>, в т.ч. pthread_mutex_lock...).
Кто нибудь встречался с подобным?
Спасибо сказали:
mikluxo
Сообщения: 283
ОС: Slackware 12.2

Re: undefined reference to pthread_mutex_trylock

Сообщение mikluxo »

А на сырец взглянуть не дадите?
Ich weiss, dass ich nichts weiss, aber wissen Sie es auch?
Завистники на что не взглянут,
подымут вечно лай,
А ты себе своей дорогою ступай,
Полают, да отстанут. Крылов
Спасибо сказали:
Аватара пользователя
zensou
Сообщения: 16
ОС: Ubuntu 9.04

Re: undefined reference to pthread_mutex_trylock

Сообщение zensou »

Исходник:

Код:

#include "LGE_Mutex.h" namespace LGE { Mutex::Mutex(bool allowInit) throw() { if(allowInit) { try { initialize(); } catch(const Exception & except) { throw copyException(except); } } } Mutex::~Mutex() { #if LGE_PLATFORM == LGE_LINUX pthread_mutex_destroy(&mMutex); #elif LGE_PLATFORM == LGE_WINDOWS DeleteCriticalSection(&mMutex); #endif } void Mutex::initialize() throw() { #if LGE_PLATFORM == LGE_LINUX int result = pthread_mutex_init(&mMutex, 0); if(result != 0) throw initException("pthread_mutex_init() fail (code=%d)", result); #elif LGE_PLATFORM == LGE_WINDOWS InitializeCriticalSection(&mMutex); #endif } void Mutex::lock() throw() { #if LGE_PLATFORM == LGE_LINUX int result = pthread_mutex_lock(&mMutex); if(result != 0) throw initException("pthread_mutex_lock() fail (code=%d)", result); #elif LGE_PLATFORM == LGE_WINDOWS EnterCriticalSection(&mMutex); #endif } bool Mutex::tryLock() throw() { #if LGE_PLATFORM == LGE_LINUX int result = pthread_mutex_trylock(&mMutex); if(result != 0 && result != EBUSY) throw initException("pthread_mutex_trylock() fail (code=%d)", result); return result == 0; #elif LGE_PLATFORM == LGE_WINDOWS return TryEnterCriticalSection(&mMutex) == TRUE; #endif } void Mutex::unlock() throw() { #if LGE_PLATFORM == LGE_LINUX int result = pthread_mutex_unlock(&mMutex); if(result != 0) throw initException("pthread_mutex_unlock() fail (code=%d)", result); #elif LGE_PLATFORM == LGE_WINDOWS LeaveCriticalSection(&mMutex); #endif } }

Хидер:

Код:

#ifndef __LGE_MUTEX_H__ #define __LGE_MUTEX_H__ #include "LGE_Platform.h" #include "LGE_Exception.h" #if LGE_PLATFORM == LGE_LINUX # include <sys/types.h> # include <pthread.h> # include <errno.h> #elif LGE_PLATFORM == LGE_WINDOWS # include <windows.h> #endif namespace LGE { class Mutex { private: #if LGE_PLATFORM == LGE_LINUX pthread_mutex_t mMutex; #elif LGE_PLATFORM == LGE_WINDOWS CRITICAL_SECTION mMutex; #endif public: Mutex(bool allowInit = false) throw(); ~Mutex(); void initialize() throw(); void lock() throw(); bool tryLock() throw(); void unlock() throw(); }; } #endif //__LGE_MUTEX_H__
Спасибо сказали:
Аватара пользователя
AestheteAnimus
Сообщения: 135
ОС: FreeBSD 8.0-RELEASE amd64

Re: undefined reference to pthread_mutex_trylock

Сообщение AestheteAnimus »

zensou писал(а):
08.11.2008 18:47
Компилю проект под g++ & Code::Blocks, в логе выводится ошибка...


Проверьте, стоит ли опция -lpthread при линковке
Спасибо сказали:
Аватара пользователя
zensou
Сообщения: 16
ОС: Ubuntu 9.04

Re: undefined reference to pthread_mutex_trylock

Сообщение zensou »

AestheteAnimus , спс, действительно помогло
Спасибо сказали:
Аватара пользователя
AestheteAnimus
Сообщения: 135
ОС: FreeBSD 8.0-RELEASE amd64

Re: undefined reference to pthread_mutex_trylock

Сообщение AestheteAnimus »

zensou писал(а):
09.11.2008 19:50
AestheteAnimus , спс, действительно помогло

Вот и замечательно :)
Спасибо сказали: