我正在尝试将Boost asio库用于套接字。
我使用自制程序brew install boost
构建完成后,我尝试the tutorial在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
出了什么问题?
答案 0 :(得分:3)
那些是linker errors
。如果您阅读docs:
必须提供以下库才能链接程序 使用Boost.Asio :
Boost.System用于boost :: system :: error_code和 boost :: system :: system_error类。 如果你使用Boost.Regex(可选) 任何带有a的read_until()或async_read_until()重载 boost :: regex参数。 如果你使用Boost.Asio的SSL,OpenSSL(可选) 支持。
此外,一些示例还需要Boost.Thread, Boost.Date_Time或Boost.Serialization库。
现在,您发布的错误都说:boost::system
,这意味着您需要像这样链接(假设一切都是默认值):
g++ main.cc -lboost_system
请阅读What do 'statically linked' and 'dynamically linked' mean?以获取有关链接的详细信息。