2011-04-28 149 views
6

我试图编译的例子是:http://www.boost.org/doc/libs/1_46_1/doc/html/boost_asio/examples.html (聊天例子)C++/Boost:示例中的未定义符号?

这里是我使用的是什么使它:

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

这就是端子输出:

% 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正确安装。我有另一个应用程序,使用几个提升位功能。

UPDATE: 这是当前命令我使用的是:

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

说,它无法找到-lboost_asio

我在选择/ local/lib目录看(这里是提振安装),我没有看到任何libboost_asio.so或类似的东西= \

回答

14

您需要提供g ++ boost库链接到usins -l选项。我快速查看这些示例,并猜测您确实需要thread库。你可以用它使用

g++ source.cpp -o executable -lboost_thread 

你也可以使用

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

加入-lboost不工作​​... boost_system库需要说找不到库链接。我使用我的终端的包管理器安装了boost ...所以...我知道我拥有它。 +我的其他应用程序与它一起工作...虽然我们不使用-lboost ... – NullVoxPopuli 2011-04-28 14:41:54

+0

在-l选项中,您应该指定不仅仅是提升,而是使用boost库的名称。例如,当你的应用程序使用boost-thread库(其中一个使用soname'libboost_thread.so')时,你应该指定'-lboost_thread'。 – beduin 2011-04-28 14:50:00

+0

添加更新。我真的不确定我需要什么样的库。我希望这被记录在某处 – NullVoxPopuli 2011-04-28 15:03:10