У меня есть следующая тестовая программа.
#include <iostream>
#include <cstdlib>
using namespace std;
pthread_mutex_t mymutex = PTHREAD_MUTEX_INITIALIZER;
int main(int argc, char *argv[])
{
int iret;
iret = pthread_mutex_trylock( & mymutex );
cout << "Test2 !!! " << endl;
pthread_mutex_unlock( & mymutex );
return EXIT_SUCCESS;
}
Если я скомпилирую его без добавления библиотеки pthread, я получу ошибку за неразрешенную ошибку для pthread_mutex_trylock, но только для функции pthread_mutex_trylock.
Если я заменю pthread_mutex_trylock на pthread_mutex_trylock, программа будет скомпилирована и хорошо запущена также без опции -lpthread *.
Если я добавлю опцию -lpthraed к командам компиляции, все будет работать хорошо
это хорошо работает: $ g ++ test2.c -o test2 -lpthread
это предупреждение не устранено: $ g ++ test2.c -o test2
Пример вывода ошибки:
$ g ++ test2.c -o test2
/tmp/ccU1bBdU.o: в функции main':
test2.c:(.text+0x11): undefined reference to
pthread_mutex_trylock '
collect2: ld вернул 1 статус выхода
Если я заменю инструкцию iret = pthread_mutex_trylock (& mymutex);
с iret = pthread_mutex_lock (& mymutex); программа компилируется и запускается без ошибок, даже если не добавила библиотеку pthread в команду compile
Я знаю, что правильно иметь неразрешенную ошибку, если я не использовал опцию -lpthread, но почему у меня нет такой же неразрешенной ошибки и для другой функции pthread_?
Я использую gcc 4.4.2 на fedora 12
$ g++ --version
g++ (GCC) 4.4.2 20091222 (Red Hat 4.4.2-20)
Copyright (C) 2009 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Есть ли у некоторых предположения о значении этой ссылки только для pthread_mutex_trylock?
спасибо за помощь, Энцо