У меня есть следующая тестовая программа.
#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/ccU 1bBdU.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); программа компилируется и запускается без ошибок также, если не добавляла pantread libarry в команду компиляции Я знаю, что правильно иметь нерешенную ошибку, если я не использовал параметр -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?
спасибо за помощь, Enzo