【问题标题】:Running HTTP server example from Boost Asio从 Boost Asio 运行 HTTP 服务器示例
【发布时间】:2015-10-22 13:52:02
【问题描述】:

我在尝试运行 boost 库源附带的 HTTP 服务器示例时遇到错误,路径为:boost_1_59_0/libs/asio/example/cpp11/http/server/

我已经在boost_1_59_0 目录中运行了以下命令:

  • $ ./bootstrap.sh
  • $ sudo ./bjam install
  • $ sudo ./b2 install

安装所有目标后,我尝试使用以下命令编译 main.cpp 和 server.cpp:g++ -std=c++0x -o main main.cpp -I "/home/user/Desktop/boost_1_59_0" -L "/home/user/Desktop/boost_1_59_0/libs/" -lboost_system。 有关如何编译此服务器示例的任何建议?

按照@Richard Hodges 的建议,我在 main.cpp 之后链接了 boost_1_59_0/libs/asio/example/cpp11/http/server/ 文件夹中的所有文件。它仍然没有工作,我得到了关于 lpthread 的错误,所以我将它添加到编译选项中。程序编译但执行失败,返回一个错误,指出它没有找到库 libboost_system.so.1.59.0。我尝试使用-L /path/to/library 链接文件夹,但没有成功。

解决方案:

我的编译命令:

g++ -std=gnu++0x -o main main.cpp server.cpp connection.cpp connection_manager.cpp reply.cpp mime_types.cpp request_handler.cpp request_parser.cpp -I "/home/user/Desktop/boost_1_59_0" -lboost_system -lpthread

我用这个命令解决了它:

  • $ LD_LIBRARY_PATH="/usr/local/lib/"
  • $ sudo ldconfig

然后我只运行了可执行文件,它就成功了!

【问题讨论】:

  • 你用什么命令行来编译这个例子?你还记得-lboost-system吗?你得到了什么错误输出?
  • 我使用了这个命令:g++ -std=c++0x -o main main.cpp -I "/home/user/Desktop/boost_1_59_0" -L "/home/user/Desktop/boost_1_59_0/libs/" -lboost_system。我有一个关于undefined reference to http::server::server::run()`的错误`
  • 您需要在命令行中提及所有其他 .cpp 文件。他们就在 main.cpp 之后去
  • 感谢理查德的帮助!

标签: c++ linux http boost boost-asio


【解决方案1】:

这是我刚刚编写的一个简单的 makefile:

all:server

CPPFLAGS+=-std=c++11 -Wall -pedantic
CPPFLAGS+=-g -O2

CPPFLAGS+=-pthread
LDFLAGS+=-lboost_system

%.o:%.cpp
    $(CXX) $(CPPFLAGS) $^ -c -o $@

server:$(patsubst %.cpp,%.o,$(wildcard *.cpp))
    $(CXX) $(CPPFLAGS) $^ -o $@ $(LDFLAGS)

它运行make:

g++ -std=c++11 -Wall -pedantic -g -O2 -pthread connection.cpp -c -o connection.o
g++ -std=c++11 -Wall -pedantic -g -O2 -pthread connection_manager.cpp -c -o connection_manager.o
g++ -std=c++11 -Wall -pedantic -g -O2 -pthread main.cpp -c -o main.o
g++ -std=c++11 -Wall -pedantic -g -O2 -pthread mime_types.cpp -c -o mime_types.o
g++ -std=c++11 -Wall -pedantic -g -O2 -pthread reply.cpp -c -o reply.o
g++ -std=c++11 -Wall -pedantic -g -O2 -pthread request_handler.cpp -c -o request_handler.o
g++ -std=c++11 -Wall -pedantic -g -O2 -pthread request_parser.cpp -c -o request_parser.o
g++ -std=c++11 -Wall -pedantic -g -O2 -pthread server.cpp -c -o server.o
g++ -std=c++11 -Wall -pedantic -g -O2 -pthread connection.o connection_manager.o main.o mime_types.o reply.o request_handler.o request_parser.o server.o -o server -lboost_system

然后测试程序运行:

$ ./server 0.0.0.0 9889 . & 
$ GET http://localhost:9889/main.cpp > main.cpp.0

检查文件

$ md5sum main.cpp*
be5dc1c26b5942101a7895de6baedcee  main.cpp
be5dc1c26b5942101a7895de6baedcee  main.cpp.0

完成后别忘了杀死服务器

【讨论】:

    猜你喜欢
    • 2014-10-10
    • 2011-09-21
    • 1970-01-01
    • 2015-04-30
    • 1970-01-01
    • 2018-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多