2013-03-20 82 views
2

我試圖編譯這段代碼,這是寫在升壓:: ASIO庫一個簡單的同步服務器..升壓同步服務器客戶端編譯錯誤

#include <iostream> 
#include <boost/asio.hpp> 
#include <boost/bind.hpp> 
#include <boost/thread.hpp> 
#include <boost/shared_ptr.hpp> 

using namespace std; 


using namespace boost::asio; 

typedef boost::shared_ptr<ip::tcp::socket> socket_ptr; 

int main() 
{ 

    io_service service; 
    void client_session(socket_ptr sock); 
    ip::tcp::endpoint ep(ip::address::from_string("127.0.0.1"), 2001); 
    ip::tcp::acceptor acc(service, ep); 
    while (true) { 
     socket_ptr sock(new ip::tcp::socket(service)); 
     acc.accept(*sock); 
     boost::thread(boost::bind(client_session,sock)); 
    } 

} 

void client_session(socket_ptr sock) 
{ 
    while(true) { 
     char data[512]; 
     size_t len = sock->read_some(buffer(data)); 
     if (len > 0) 
      write(*sock, buffer("ok", 2)); 
    } 
} 

錯誤,而編譯...

[[email protected] server]# g++ -o test2 test2.cpp -lboost_system -lpthread 

/tmp/cc2mbAsP.o: In function `main': 
test2.cpp:(.text+0x13d): undefined reference to `boost::thread::~thread()' 
/tmp/cc2mbAsP.o: In function `boost::detail::thread_data_base::thread_data_base()': 
test2.cpp:(.text._ZN5boost6detail16thread_data_baseC2Ev[_ZN5boost6detail16thread_data_baseC5Ev]+0x26): undefined reference to `vtable for boost::detail::thread_data_base' 
/tmp/cc2mbAsP.o: In function `boost::thread::thread<boost::_bi::bind_t<void, void (*)(boost::shared_ptr<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > >), boost::_bi::list1<boost::_bi::value<boost::shared_ptr<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > > > > > >(boost::_bi::bind_t<void, void (*)(boost::shared_ptr<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > >), boost::_bi::list1<boost::_bi::value<boost::shared_ptr<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > > > > >, boost::disable_if<boost::is_convertible<boost::_bi::bind_t<void, void (*)(boost::shared_ptr<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > >), boost::_bi::list1<boost::_bi::value<boost::shared_ptr<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > > > > >&, boost::detail::thread_move_t<boost::_bi::bind_t<void, void (*)(boost::shared_ptr<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > >), boost::_bi::list1<boost::_bi::value<boost::shared_ptr<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > > > > > > >, boost::thread::dummy*>::type)': 
test2.cpp:(.text._ZN5boost6threadC2INS_3_bi6bind_tIvPFvNS_10shared_ptrINS_4asio19basic_stream_socketINS5_2ip3tcpENS5_21stream_socket_serviceIS8_EEEEEEENS2_5list1INS2_5valueISC_EEEEEEEET_NS_10disable_ifINS_14is_convertibleIRSK_NS_6detail13thread_move_tISK_EEEEPNS0_5dummyEE4typeE[_ZN5boost6threadC5INS_3_bi6bind_tIvPFvNS_10shared_ptrINS_4asio19basic_stream_socketINS5_2ip3tcpENS5_21stream_socket_serviceIS8_EEEEEEENS2_5list1INS2_5valueISC_EEEEEEEET_NS_10disable_ifINS_14is_convertibleIRSK_NS_6detail13thread_move_tISK_EEEEPNS0_5dummyEE4typeE]+0x7c): undefined reference to `boost::thread::start_thread()' 
/tmp/cc2mbAsP.o: In function `boost::detail::thread_data<boost::_bi::bind_t<void, void (*)(boost::shared_ptr<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > >), boost::_bi::list1<boost::_bi::value<boost::shared_ptr<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > > > > > >::~thread_data()': 
test2.cpp:(.text._ZN5boost6detail11thread_dataINS_3_bi6bind_tIvPFvNS_10shared_ptrINS_4asio19basic_stream_socketINS5_2ip3tcpENS5_21stream_socket_serviceIS8_EEEEEEENS2_5list1INS2_5valueISC_EEEEEEED2Ev[_ZN5boost6detail11thread_dataINS_3_bi6bind_tIvPFvNS_10shared_ptrINS_4asio19basic_stream_socketINS5_2ip3tcpENS5_21stream_socket_serviceIS8_EEEEEEENS2_5list1INS2_5valueISC_EEEEEEED5Ev]+0x3b): undefined reference to `boost::detail::thread_data_base::~thread_data_base()' 
test2.cpp:(.text._ZN5boost6detail11thread_dataINS_3_bi6bind_tIvPFvNS_10shared_ptrINS_4asio19basic_stream_socketINS5_2ip3tcpENS5_21stream_socket_serviceIS8_EEEEEEENS2_5list1INS2_5valueISC_EEEEEEED2Ev[_ZN5boost6detail11thread_dataINS_3_bi6bind_tIvPFvNS_10shared_ptrINS_4asio19basic_stream_socketINS5_2ip3tcpENS5_21stream_socket_serviceIS8_EEEEEEENS2_5list1INS2_5valueISC_EEEEEEED5Ev]+0x55): undefined reference to `boost::detail::thread_data_base::~thread_data_base()' 
/tmp/cc2mbAsP.o:(.rodata._ZTIN5boost6detail11thread_dataINS_3_bi6bind_tIvPFvNS_10shared_ptrINS_4asio19basic_stream_socketINS5_2ip3tcpENS5_21stream_socket_serviceIS8_EEEEEEENS2_5list1INS2_5valueISC_EEEEEEEE[typeinfo for boost::detail::thread_data<boost::_bi::bind_t<void, void (*)(boost::shared_ptr<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > >), boost::_bi::list1<boost::_bi::value<boost::shared_ptr<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > > > > > >]+0x10): undefined reference to `typeinfo for boost::detail::thread_data_base' 
collect2: ld returned 1 exit status 

有什麼想法?

修正:

使用 G ++ -o test2的測試2.cpp -lboost_system -lpthread -lboost_thread-MT

+0

嘗試在編譯器參數中添加'-lboost_thread'。 'boost :: thread'只在定位MSVC時纔是頭,也許g ++是相同的。 – Praetorian 2013-03-20 01:20:29

+0

按照Haroogan,我有一個多線程版本安裝 – krisdigitx 2013-03-20 01:28:54

+0

可能的重複[編譯boost.asio示例時鏈接器錯誤](http://stackoverflow.com/questions/2568243/linker-error-when-compiling-boost- asio-example) – 2013-03-20 04:10:38

回答

0

您應該鏈接對Boost.Thread庫。添加-lboost_thread

注意:它可能有多線程版本。然後嘗試-lboost_thread-mt

+0

yup..cool它工作... g ++ -o test2 test2.cpp -lboost_system -lpthread -lboost_thread-mt – krisdigitx 2013-03-20 01:24:43