C ++ / Boost: Undefined Symbols in the example?

An example I'm trying to execute is: http://www.boost.org/doc/libs/1_46_1/doc/html/boost_asio/examples.html (chat example)

Here is what I use to do this:

>>> g++ chat_client.cpp chat_message.hpp >>> g++ chat_server.cpp chat_message.hpp 

This is what the terminal issues:

 % g++ chat_client.cpp chat_message.hpp In file included from chat_client.cpp:17: chat_message.hpp: In member function 'void chat_message::encode_header()': chat_message.hpp:84: warning: format '%4d' expects type 'int', but argument 3 has type 'size_t' ld: warning: in chat_message.hpp, file was built for unsupported file format which is not the architecture being linked (x86_64) Undefined symbols: "boost::system::generic_category()", referenced from: __static_initialization_and_destruction_0(int, int)in cctJA2c1.o __static_initialization_and_destruction_0(int, int)in cctJA2c1.o "boost::thread::start_thread()", referenced from: boost::thread::thread<boost::_bi::bind_t<unsigned long, boost::_mfi::mf0<unsigned long, boost::asio::io_service>, boost::_bi::list1<boost::_bi::value<boost::asio::io_service*> > > >(boost::_bi::bind_t<unsigned long, boost::_mfi::mf0<unsigned long, boost::asio::io_service>, boost::_bi::list1<boost::_bi::value<boost::asio::io_service*> > >, boost::disable_if<boost::is_convertible<boost::_bi::bind_t<unsigned long, boost::_mfi::mf0<unsigned long, boost::asio::io_service>, boost::_bi::list1<boost::_bi::value<boost::asio::io_service*> > >&, boost::detail::thread_move_t<boost::_bi::bind_t<unsigned long, boost::_mfi::mf0<unsigned long, boost::asio::io_service>, boost::_bi::list1<boost::_bi::value<boost::asio::io_service*> > > > >, boost::thread::dummy*>::type)in cctJA2c1.o "boost::thread::join()", referenced from: _main in cctJA2c1.o "typeinfo for boost::detail::thread_data_base", referenced from: typeinfo for boost::detail::thread_data<boost::_bi::bind_t<unsigned long, boost::_mfi::mf0<unsigned long, boost::asio::io_service>, boost::_bi::list1<boost::_bi::value<boost::asio::io_service*> > > >in cctJA2c1.o "vtable for boost::detail::thread_data_base", referenced from: boost::detail::thread_data_base::thread_data_base()in cctJA2c1.o "boost::thread::~thread()", referenced from: _main in cctJA2c1.o _main in cctJA2c1.o "boost::detail::thread_data_base::~thread_data_base()", referenced from: boost::detail::thread_data<boost::_bi::bind_t<unsigned long, boost::_mfi::mf0<unsigned long, boost::asio::io_service>, boost::_bi::list1<boost::_bi::value<boost::asio::io_service*> > > >::~thread_data()in cctJA2c1.o boost::detail::thread_data<boost::_bi::bind_t<unsigned long, boost::_mfi::mf0<unsigned long, boost::asio::io_service>, boost::_bi::list1<boost::_bi::value<boost::asio::io_service*> > > >::~thread_data()in cctJA2c1.o "boost::system::system_category()", referenced from: boost::system::get_system_category() in cctJA2c1.o boost::system::error_code::error_code()in cctJA2c1.o __static_initialization_and_destruction_0(int, int)in cctJA2c1.o ld: symbol(s) not found collect2: ld returned 1 exit status 
  • Boost is installed correctly. I have another application that uses several bit-bit functions.

UPDATE: this is the current command I'm using:

 % g++ chat_client.cpp chat_message.hpp -lboost_asio -lboost_thread -o client -L/opt/local/lib/ 

says it cannot find -lboost_asio

I looked in opt / local / lib (where boost is installed) and I do not see libboost_asio.so or something like that = \

+6
source share
1 answer

You need to provide the g ++ acceleration libraries to communicate with the usins ​​-l option. I will quickly look through these examples and assume that you definitely need a thread library. You can contact him using

 g++ source.cpp -o executable -lboost_thread 

You may also need the boost_system library with

 g++ source.cpp -o executable -lboost_thread -lboost_system 
+14
source

Source: https://habr.com/ru/post/886887/


All Articles