cpp-netlib hello world 示例不会在 linux 上编译
cpp-netlib hello world example wont compile on linux
我尝试 运行 在 cpp-netlib.org 上使用 cpp-netlib-0.12.0 和 Ubuntu 16.04 上的 boost-1.64.0 的 hello world 示例。一段代码是(来自第 1 行):
#include <boost/network/protocol/http/server.hpp>
#include <iostream>
namespace http = boost::network::http;
struct hello_world;
typedef http::server<hello_world> server;
struct hello_world
{
void operator()(server::request const &request, server::response &response)
{
server::string_type ip = source(request);
unsigned int port = request.source_port;
std::ostringstream data;
data << "Hello, " << ip << ':' << port << '!';
response = server::response::stock_reply(server::response::ok, data.str());
}
void log(const server::string_type& message)
{
std::cerr << "ERROR: " << message << std::endl;
}
};
并且当我使用以下行进行编译时:
g++ test1.cpp -o test1 -std=c++11 -lcppnetlib-uri -lcppnetlib-server-parsers -lcppnetlib-client-connections -lboost_system -lboost_thread -lpthread
我收到以下错误:
test1.cpp:11:61: error: ‘boost::network::http::server<hello_world>::response’ has not been declared
void operator()(server::request const &request, server::response &response)
^
test1.cpp: In member function ‘void hello_world::operator()(const request&, int&)’:
test1.cpp:17:28: error: ‘boost::network::http::server<hello_world>::response’ has not been declared
response = server::response::stock_reply(server::response::ok, data.str());
^
test1.cpp:17:58: error: ‘boost::network::http::server<hello_world>::response’ has not been declared
response = server::response::stock_reply(server::response::ok, data.str());
^
我直接从网站上的示例中提取了代码。我检查了包含路径,所有必要的库似乎都在那里。我似乎无法弄清楚问题是什么。
cpp-netlib 的文档似乎一团糟(就像整个项目一样)。 HTTP server API page 坚持认为 http::server
的 Handler
模板参数应该让成员 operator ()
以 connection_ptr
作为第二个参数(尽管它暗示错误的包含):
#include <boost/network/protocol/http/server.hpp>
#include <boost/network/utils/thread_pool.hpp>
struct handler_type;
typedef boost::network::http::server<handler_type> http_server;
struct handler_type
{
void
operator ()
(
http_server::request const & request,
http_server::connection_ptr connection
)
{
// do something here
}
};
我尝试 运行 在 cpp-netlib.org 上使用 cpp-netlib-0.12.0 和 Ubuntu 16.04 上的 boost-1.64.0 的 hello world 示例。一段代码是(来自第 1 行):
#include <boost/network/protocol/http/server.hpp>
#include <iostream>
namespace http = boost::network::http;
struct hello_world;
typedef http::server<hello_world> server;
struct hello_world
{
void operator()(server::request const &request, server::response &response)
{
server::string_type ip = source(request);
unsigned int port = request.source_port;
std::ostringstream data;
data << "Hello, " << ip << ':' << port << '!';
response = server::response::stock_reply(server::response::ok, data.str());
}
void log(const server::string_type& message)
{
std::cerr << "ERROR: " << message << std::endl;
}
};
并且当我使用以下行进行编译时:
g++ test1.cpp -o test1 -std=c++11 -lcppnetlib-uri -lcppnetlib-server-parsers -lcppnetlib-client-connections -lboost_system -lboost_thread -lpthread
我收到以下错误:
test1.cpp:11:61: error: ‘boost::network::http::server<hello_world>::response’ has not been declared
void operator()(server::request const &request, server::response &response)
^
test1.cpp: In member function ‘void hello_world::operator()(const request&, int&)’:
test1.cpp:17:28: error: ‘boost::network::http::server<hello_world>::response’ has not been declared
response = server::response::stock_reply(server::response::ok, data.str());
^
test1.cpp:17:58: error: ‘boost::network::http::server<hello_world>::response’ has not been declared
response = server::response::stock_reply(server::response::ok, data.str());
^
我直接从网站上的示例中提取了代码。我检查了包含路径,所有必要的库似乎都在那里。我似乎无法弄清楚问题是什么。
cpp-netlib 的文档似乎一团糟(就像整个项目一样)。 HTTP server API page 坚持认为 http::server
的 Handler
模板参数应该让成员 operator ()
以 connection_ptr
作为第二个参数(尽管它暗示错误的包含):
#include <boost/network/protocol/http/server.hpp>
#include <boost/network/utils/thread_pool.hpp>
struct handler_type;
typedef boost::network::http::server<handler_type> http_server;
struct handler_type
{
void
operator ()
(
http_server::request const & request,
http_server::connection_ptr connection
)
{
// do something here
}
};