2010-08-27 32 views
21
#include <boost/thread/thread.hpp> 
#include <iostream> 

void hello() 
{ 
    std::cout << 
    "Hello world, I'm a thread!" 
    << std::endl; 
} 

int main(int argc, char* argv[]) 
{ 
    boost::thread thrd(&hello); 
    thrd.join(); 
    return 0; 
} 

Tôi chạy thử để biên dịch chương trình này, và nhận được các lỗi này:Boost chủ đề lỗi: undefined tham khảo

/usr/include/boost/thread/pthread/mutex.hpp:40: undefined reference to 
    `boost::thread_resource_error::thread_resource_error()' 
/usr/include/boost/thread/pthread/mutex.hpp:40: undefined reference to 
    `boost::thread_resource_error::~thread_resource_error()' 
/usr/include/boost/thread/pthread/mutex.hpp:40: undefined reference to 
    `typeinfo for boost::thread_resource_error' 
./src/thread.o: In function `condition_variable': 
/usr/include/boost/thread/pthread/condition_variable_fwd.hpp:33: 
    undefined reference to `boost::thread_resource_error::thread_resource_error()' 
/usr/include/boost/thread/pthread/condition_variable_fwd.hpp:33: 
    undefined reference to `boost::thread_resource_error::~thread_resource_error()' 
/usr/include/boost/thread/pthread/condition_variable_fwd.hpp:33: \ 
    undefined reference to `typeinfo for boost::thread_resource_error' 
./src/thread.o: In function `thread_data_base': 
/usr/include/boost/thread/pthread/thread_data.hpp:54: 
    undefined reference to `vtable for boost::detail::thread_data_base' 
./src/thread.o: In function `thread<void (*)()>': 
/usr/include/boost/thread/detail/thread.hpp:188: 
    undefined reference to `boost::thread::start_thread()' 
./src/thread.o: In function `~thread_data': 
/usr/include/boost/thread/detail/thread.hpp:40: 
    undefined reference to `boost::detail::thread_data_base::~thread_data_base()' 
/usr/include/boost/thread/detail/thread.hpp:40: undefined reference to 
    `boost::detail::thread_data_base::~thread_data_base()' 

Bất kỳ một thể cho tôi biết lý do tại sao tôi đang nhận được lỗi này?

+0

Âm thanh như tăng không được cài đặt đúng trên hệ thống của bạn – riwalk

+0

nhưng tôi '#include #include #include using namespace std; sử dụng tăng không gian tên; int main() { \t chuỗi str1; \t cin >> str1; \t // chuỗi str1 ("hello world!"); \t to_upper (str1); \t cout << str1; trả lại 0; } 'chạy hoàn hảo – lal

+5

tôi tìm thấy nó tôi cần phải cài đặt gói libboost-thread trong ubuntu – lal

Trả lời

17

Nhiều thư viện tăng cường được triển khai đầy đủ trong tệp tiêu đề. Boost.thread thì không. Có vẻ như nó không phải là liên kết trong thư viện chủ đề tăng. Kiểm tra đường dẫn tìm kiếm liên kết của bạn. Hoặc, như bình luận của Stargazer712 về OP nói, hãy kiểm tra cài đặt. Bạn sẽ thấy một cái gì đó như libboost_thread-gcc-xxx-1_nn.o trong thư mục lib của bạn. Nếu vậy, hãy thử tham khảo nó một cách rõ ràng trong bước liên kết của bạn (một cái gì đó như -L<path_to_lib> -lboost-thread-gcc-xx-1_nn). Nếu không, sau đó bạn dường như không có một cài đặt hoàn chỉnh.

+5

Đối với bản ghi, đó là -lboost_thread. Xem http://antonym.org/2009/05/threading-with-boost---part-i-creating-threads.html – JRG

+1

@Josh: cảm ơn cho đầu vào. Xem thêm http://www.boost.org/doc/libs/1_47_0/more/getting_started/windows.html#library-naming và http: //www.boost.org/doc/libs/1_47_0/more/getting_started/unix-variants.html # link-your-program-to-a-boost-library. – gregg

0

thêm biên dịch tùy chọn

-L<path_to_lib> -lboost-thread-gcc-xx-1_nn 

câu trả lời Gregg là đúng!

35

biên dịch với thẻ mt tức là -lboost_thread-mt

+2

Tôi đã có một vấn đề tương tự và điều này giải quyết nó! Cảm ơn! –

+1

bạn đã lưu ngày của tôi! – ducin

+0

hoặc '-lboost_thread-mgwXX-mt-N_NN' trong đó XX là phiên bản của bạn của mgw, thường chỉ có hai (4.7.1 => 47) và Ns là phiên bản tăng cường của bạn, một lần nữa trước tiên (boost_1_55_0 => 1_55), vì vậy cuối cùng có thể trông giống như _____ :::::: '-lboost_thread-mgw47-mt-1_55' –

2

Tôi đã có một vấn đề tương tự với centos 6.5 khi biên dịch povray 3.7 và điều này giải quyết nó - chỉ cần thêm -lboost_thread-mt trong Makefile của bạn.

12

Tôi đã có cùng một câu hỏi, nhưng -lboost_thread-mt hiện không được chấp nhận, xem this answer trên askubuntu.com. Thay vào đó, những gì bạn muốn trong makefile của mình (ít nhất là đối với linux) là:

-lpthread -lboost_thread ... 

Boost đơn giản là bạn có trách nhiệm liên kết đến thư viện luồng của hệ thống.

Các vấn đề liên quan