用gcc编译asio

欧娜·安德娜(Oana Andone)

我尝试使用gcc从此处http://think-async.com/Asio/asio-1.11.0/doc/asio/examples/cpp11_examples.html#asio.examples.cpp11_examples.http_server编译HTTP Server 我用了

 g++ main.cpp -std=c++11 -I/home/gabi/Downloads/asio-1.11.0/include -pthread

我明白了

/tmp/ccE1vIzF.o: In function `http::server::server::server(std::string const&, std::string const&, std::string const&)':
server.cpp:(.text+0x1a3): undefined reference to `http::server::connection_manager::connection_manager()'
server.cpp:(.text+0x1e0): undefined reference to `http::server::request_handler::request_handler(std::string const&)'
/tmp/ccE1vIzF.o: In function `http::server::server::do_accept()::{lambda(std::error_code)#1}::operator()(std::error_code) const':
server.cpp:(.text+0x52a): undefined reference to `http::server::connection_manager::start(std::shared_ptr<http::server::connection>)'
/tmp/ccE1vIzF.o: In function `http::server::server::do_await_stop()::{lambda(std::error_code, int)#1}::operator()(std::error_code, int) const':
server.cpp:(.text+0x5e9): undefined reference to `http::server::connection_manager::stop_all()'
/tmp/ccE1vIzF.o: In function `_ZN9__gnu_cxx13new_allocatorIN4http6server10connectionEE9constructIS3_IN4asio19basic_stream_socketINS6_2ip3tcpENS6_21stream_socket_serviceIS9_EEEERNS2_18connection_managerERNS2_15request_handlerEEEEvPT_DpOT0_':
server.cpp:(.text._ZN9__gnu_cxx13new_allocatorIN4http6server10connectionEE9constructIS3_IN4asio19basic_stream_socketINS6_2ip3tcpENS6_21stream_socket_serviceIS9_EEEERNS2_18connection_managerERNS2_15request_handlerEEEEvPT_DpOT0_[_ZN9__gnu_cxx13new_allocatorIN4http6server10connectionEE9constructIS3_IN4asio19basic_stream_socketINS6_2ip3tcpENS6_21stream_socket_serviceIS9_EEEERNS2_18connection_managerERNS2_15request_handlerEEEEvPT_DpOT0_]+0x8b): undefined reference to `http::server::connection::connection(asio::basic_stream_socket<asio::ip::tcp, asio::stream_socket_service<asio::ip::tcp> >, http::server::connection_manager&, http::server::request_handler&)'
collect2: error: ld returned 1 exit status

有人知道为什么吗?如果我尝试编译http://think-async.com/Asio/asio-1.11.0/doc/asio/examples/cpp11_examples.html#asio.examples.cpp11_examples.allocation可以。

维拉克斯

首先,让我说,您似乎提供了错误的编译命令来生成该错误消息,因为该错误消息表明您正在编译server.cpp,例如:

server.cpp:(.text+0x1a3): undefined reference to 'http::server::connection_manager::connection_manager()'

当你实际上不是。实际上,您只在编译main.cpp,因为这是您发出的编译命令中唯一的cpp文件。

另一个答案是,您需要编译HTTP服务器的所有.cpp文件,而不仅仅是main.cpp为此,您只需将所有.cpp文件传递给g++命令:

g++ main.cpp connection.cpp connection_manager.cpp mime_types.cpp reply.cpp request_handler.cpp request_parser.cpp server.cpp -std=c++11 -I/home/gabi/Downloads/asio-1.11.0/include -pthread

最后,相反的是另一个回答说,你不是要反对任何图书馆的链接,因为短耳是,只有头库。但是,Boost.Asio并非仅是标头,因此,如果您使用Boost.Asio,则需要使用以下链接器标志链接到Boost'System'库:

-L/path/to/folder/containing/Boost/libs/ -lboost_system

(这是假设Boost库未安装在标准系统位置,例如/lib;如果已安装,则可以省略该-L标志。如注释中所述,-lboost_system告诉链接器(ld)查找名为的库libboost_system.so。请参见。该ld 手册页的详细信息,如何ld认定库)。

但是,由于正如您所说的那样,您仅使用Asio而不是Boost.Asio,因此只包含适当的.hpp头文件并使用-I编译器标志指向头文件位置就可以了。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

用GCC编译* .mm

来自分类Dev

用gcc编译.cpp

来自分类Dev

用GCC编译* .mm

来自分类Dev

从 Github 用 GCC 编译

来自分类Dev

用clang而不是gcc编译

来自分类Dev

运行用gcc编译的程序

来自分类Dev

用gcc编译多个C文件

来自分类Dev

FLTK用gcc编译错误

来自分类Dev

用gcc编译多个C文件

来自分类Dev

用内置版本重新编译gcc

来自分类Dev

用新的gcc编译旧内核

来自分类Dev

用GCC编译“ sizeof(char [0])”效果如何

来自分类Dev

用gcc编译时-ffreestanding和-nostdlib之间的区别

来自分类Dev

编写一个用gcc编译的脚本

来自分类Dev

尝试使用 gcc 编译用 C 编写的简单 dll 失败

来自分类Dev

为什么boost :: asio :: io_service无法用std :: bind编译?

来自分类Dev

在Solaris上,用gcc编译的库是否可用与用cc生成的库相同的方式?

来自分类Dev

用-pg编译的gcc不会产生gprof所需的二进制文件

来自分类Dev

如何使用可以用nasm编译的gcc生成汇编代码

来自分类Dev

为什么我可以用GCC制作的最小编译的exe是67KB?

来自分类Dev

用gcc编译的C ++在VC ++ 14中有效且无效

来自分类Dev

gcc奇怪的编译问题

来自分类Dev

共享库编译gcc

来自分类Dev

gcc编译多个文件

来自分类Dev

GCC 4.8.1编译失败

来自分类Dev

使无法编译GCC

来自分类Dev

gcc编译多个文件

来自分类Dev

编译 gcc 4.8.5

来自分类Dev

为什么这段代码不能用clang编译,用gcc崩溃,但是用VC ++可以正常运行?