0

我正在尝试将 Boost asio 库用于套接字。

我使用自制软件安装了 boostbrew install boost

构建完成后,我尝试了在 boost 网站上创建服务器的教程。

我所做的只是将该代码粘贴到一个名为main.cc

当我尝试编译时g++ main.cc,出现此错误:

Undefined symbols for architecture x86_64:
"boost::system::system_category()", referenced from:
  __static_initialization_and_destruction_0(int, int)in ccTbzxpk.o
  boost::asio::error::get_system_category()    in ccTbzxpk.o
  boost::system::error_code::error_code()in ccTbzxpk.o
"boost::system::generic_category()", referenced from:
  __static_initialization_and_destruction_0(int, int)in ccTbzxpk.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status

出了什么问题?

4

1 回答 1

3

那些是linker errors。如果您阅读文档

为了链接使用 Boost.Asio 的程序,必须提供以下库:

Boost.System 用于 boost::system::error_code 和 boost::system::system_error 类。 Boost.Regex(可选)如果您使用任何带有 boost::regex 参数的 read_until() 或 async_read_until() 重载。如果您使用 Boost.Asio 的 SSL 支持,则 OpenSSL(可选)。

此外,一些示例还需要 Boost.Thread、Boost.Date_Time 或 Boost.Serialization 库。

现在,您发布的错误都说:boost::system,这意味着您需要像这样链接(假设一切都是默认的): g++ main.cc -lboost_system

请阅读“静态链接”和“动态链接”是什么意思?有关链接的深入信息。

于 2013-04-12T21:41:52.583 回答