我有以下測試程序。未定義的引用`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_mutex_trylock未解決的錯誤的錯誤,但僅限於功能pthread_mutex_trylock。
如果我和pthread_mutex_trylock取代pthread_mutex_trylock程序編譯和運行過程中出現好也沒有-lpthread *選項。
如果我添加了-lpthraed選項編譯命令都運行良好 這個運行良好:$ G ++ test2.c中-o test2的-lpthread 這種警告沒有得到解決:$ G ++ test2.c中-o test2的
實施例誤差輸出: $克++ test2.c中-o TEST2 /tmp/ccU1bBdU.o:在功能main': test2.c:(.text+0x11): undefined reference to
pthread_mutex_trylock」 collect2:LD返回1個退出狀態
如果我更換instructi on iret = pthread_mutex_trylock(& mymutex);
with iret = pthread_mutex_lock(& mymutex);程序編譯和運行沒有錯誤此外,如果並行線程libarry沒有添加到編譯命令 我知道這是正確的有未解決的錯誤,如果我沒有使用-lpthread選項,但爲什麼我不一樣未解決的錯誤也爲其他pthread_函數?
我使用Fedora的GCC 4.4.2 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鏈接,就這樣做。 – 2010-01-05 22:36:20
mybe我仍然有學習的願望:) – enzo2 2010-01-07 19:28:58
儘管如此,這個問題在像我這樣的情況下非常有用,在這種情況下,調用'pthread_mutex_lock()'被'pthread_mutex_trylock()'取代,導致事情無緣無故地中斷。 – foraidt 2013-06-17 13:56:57