Tôi có chương trình thử nghiệm sau đây.tham chiếu không xác định đối với `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;
}
Nếu tôi biên dịch nó mà không cần thêm thư viện pthread tôi nhận được lỗi cho lỗi chưa được giải quyết cho pthread_mutex_trylock, nhưng chỉ dành cho chức năng pthread_mutex_trylock.
Nếu tôi thay thế pthread_mutex_trylock bằng pthread_mutex_trylock thì chương trình được biên dịch và cũng chạy cũng không có tùy chọn -lpthread *.
Nếu tôi thêm tùy chọn -lpthraed cho biên dịch lệnh tất cả chạy tốt này chạy tốt: $ g ++ test2.c -o test2 -lpthread này cảnh báo chưa được giải quyết: $ g ++ test2.c -o test2
ra lỗiVí dụ: $ g ++ test2.c -o test2 /tmp/ccU1bBdU.o: Trong chức năng main': test2.c:(.text+0x11): undefined reference to
pthread_mutex_trylock' collect2: ld trở về 1 trạng thái thoát
Nếu tôi thay thế instructi trên iret = pthread_mutex_trylock (& mymutex);
với iret = pthread_mutex_lock (& mymutex); chương trình biên dịch và chạy mà không có lỗi cũng nếu không thêm libarry pthread vào lệnh biên dịch Tôi biết rằng có quyền có lỗi chưa được giải quyết nếu tôi không sử dụng tùy chọn -lpthread, nhưng tại sao tôi không giống nhau lỗi chưa được giải quyết cũng cho chức năng pthread_ khác?
Tôi đang sử dụng gcc 4.4.2 trên 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.
Do một số có một số gợi ý về ý nghĩa của unreference này chỉ dành cho pthread_mutex_trylock?
cảm ơn vì sự giúp đỡ, Enzo
Đó có thể là một số hành vi cụ thể cho nền tảng, nhưng tại sao bạn thậm chí còn bận tâm? Bạn có nghĩa vụ phải liên kết với pthread, chỉ cần làm điều đó. –
mybe Tôi vẫn còn ý muốn học :) – enzo2
Tuy nhiên câu hỏi này rất hữu ích trong một tình huống như tôi, nơi mà một cuộc gọi đến 'pthread_mutex_lock()' được thay thế bằng 'pthread_mutex_trylock()' gây ra mọi thứ để phá vỡ không có lý do rõ ràng. – foraidt