У меня есть следующая тестовая программа.undefined ссылка на `pthread_mutex_trylock '
#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 возможность компиляции команд все хорошо работает это хорошо работать: $ г ++ test2.c -o test2 -lpthread это предупредит нерешенным: $ г ++ test2.c -o test2
Пример вывода ошибки: $ г ++ test2.c -o test2 /tmp/ccU1bBdU.o: В функции main': test2.c:(.text+0x11): undefined reference to
pthread_mutex_trylock» collect2: л.д. возвращается статус 1 выхода
Если я заменю instructi на iret = pthread_mutex_trylock (& mymutex);
с iret = pthread_mutex_lock (& mymutex); программа компилируется и запускается без ошибок также, если не добавляла pthread 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.
У некоторых есть предположение о значении этого unreference только для pthread_mutex_trylock?
спасибо за помощь, Энцо
Это может быть поведение определенной платформы, но почему вы даже беспокоитесь? Вы должны связываться с pthread, просто сделайте это. –
mybe У меня еще есть желание узнать :) – enzo2
Тем не менее этот вопрос полезен в такой ситуации, как мой, где вызов 'pthread_mutex_lock()' был заменен на 'pthread_mutex_trylock()', заставляя вещи сломаться без видимой причины. – foraidt