c – 编译boost.asio示例时的链接器错误

前端之家收集整理的这篇文章主要介绍了c – 编译boost.asio示例时的链接器错误前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试学习一点点C和Boost.Asio.我正在尝试编译以下代码示例:
  1. #include <iostream>
  2. #include <boost/array.hpp>
  3. #include <boost/asio.hpp>
  4.  
  5. using boost::asio::ip::tcp;
  6.  
  7. int main(int argc,char* argv[])
  8. {
  9. try
  10. {
  11. if (argc != 2)
  12. {
  13. std::cerr << "Usage: client <host>" << std::endl;
  14. return 1;
  15. }
  16.  
  17. boost::asio::io_service io_service;
  18.  
  19. tcp::resolver resolver(io_service);
  20. tcp::resolver::query query(argv[1],"daytime");
  21. tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);
  22. tcp::resolver::iterator end;
  23.  
  24. tcp::socket socket(io_service);
  25. boost::system::error_code error = boost::asio::error::host_not_found;
  26. while (error && endpoint_iterator != end)
  27. {
  28. socket.close();
  29. socket.connect(*endpoint_iterator++,error);
  30. }
  31. if (error)
  32. throw boost::system::system_error(error);
  33.  
  34. for (;;)
  35. {
  36. boost::array<char,128> buf;
  37. boost::system::error_code error;
  38.  
  39. size_t len = socket.read_some(boost::asio::buffer(buf),error);
  40.  
  41. if (error == boost::asio::error::eof)
  42. break; // Connection closed cleanly by peer.
  43. else if (error)
  44. throw boost::system::system_error(error); // Some other error.
  45.  
  46. std::cout.write(buf.data(),len);
  47. }
  48. }
  49. catch (std::exception& e)
  50. {
  51. std::cerr << e.what() << std::endl;
  52. }
  53.  
  54. return 0;
  55. }

使用以下命令行:

  1. g++ -I /usr/local/boost_1_42_0 a.cpp

它引起了一个不清楚的错误

  1. /tmp/ccCv9ZJA.o: In function `__static_initialization_and_destruction_0(int,int)':
  2. a.cpp:(.text+0x654): undefined reference to `boost::system::get_system_category()'
  3. a.cpp:(.text+0x65e): undefined reference to `boost::system::get_generic_category()'
  4. a.cpp:(.text+0x668): undefined reference to `boost::system::get_generic_category()'
  5. a.cpp:(.text+0x672): undefined reference to `boost::system::get_generic_category()'
  6. a.cpp:(.text+0x67c): undefined reference to `boost::system::get_system_category()'
  7. /tmp/ccCv9ZJA.o: In function `boost::system::error_code::error_code()':
  8. a.cpp:(.text._ZN5boost6system10error_codeC2Ev[_ZN5boost6system10error_codeC5Ev]+0x10): undefined reference to `boost::system::get_system_category()'
  9. /tmp/ccCv9ZJA.o: In function `boost::asio::error::get_system_category()':
  10. a.cpp:(.text._ZN5boost4asio5error19get_system_categoryEv[boost::asio::error::get_system_category()]+0x7): undefined reference to `boost::system::get_system_category()'
  11. /tmp/ccCv9ZJA.o: In function `boost::asio::detail::posix_thread::~posix_thread()':
  12. a.cpp:(.text._ZN5boost4asio6detail12posix_threadD2Ev[_ZN5boost4asio6detail12posix_threadD5Ev]+0x1d): undefined reference to `pthread_detach'
  13. /tmp/ccCv9ZJA.o: In function `boost::asio::detail::posix_thread::join()':
  14. a.cpp:(.text._ZN5boost4asio6detail12posix_thread4joinEv[boost::asio::detail::posix_thread::join()]+0x25): undefined reference to `pthread_join'
  15. /tmp/ccCv9ZJA.o: In function `boost::asio::detail::posix_tss_ptr<boost::asio::detail::call_stack<boost::asio::detail::task_io_service<boost::asio::detail::epoll_reactor<false> > >::context>::~posix_tss_ptr()':
  16. a.cpp:(.text._ZN5boost4asio6detail13posix_tss_ptrINS1_10call_stackINS1_15task_io_serviceINS1_13epoll_reactorILb0EEEEEE7contextEED2Ev[_ZN5boost4asio6detail13posix_tss_ptrINS1_10call_stackINS1_15task_io_serviceINS1_13epoll_reactorILb0EEEEEE7contextEED5Ev]+0xf): undefined reference to `pthread_key_delete'
  17. /tmp/ccCv9ZJA.o: In function `boost::asio::detail::posix_tss_ptr<boost::asio::detail::call_stack<boost::asio::detail::task_io_service<boost::asio::detail::epoll_reactor<false> > >::context>::posix_tss_ptr()':
  18. a.cpp:(.text._ZN5boost4asio6detail13posix_tss_ptrINS1_10call_stackINS1_15task_io_serviceINS1_13epoll_reactorILb0EEEEEE7contextEEC2Ev[_ZN5boost4asio6detail13posix_tss_ptrINS1_10call_stackINS1_15task_io_serviceINS1_13epoll_reactorILb0EEEEEE7contextEEC5Ev]+0x22): undefined reference to `pthread_key_create'
  19. collect2: ld returned 1 exit status

我该如何解决

解决方法

你需要链接libboost_system,显然也是libboost_thread.
  1. g++ -I /usr/local/boost_1_42_0 -lboost_system -lboost_thread a.cpp

在多线程库的情况下:

  1. g++ -I /usr/local/boost_1_42_0 -lboost_system-mt -lboost_thread-mt a.cpp

猜你在找的C&C++相关文章