必要环境
输入如下命令以安装必要的环境:
sudo apt-get update
sudo apt-get install cmake build-essential g++ python-dev-is-python3 autotools-dev libicu-dev build-essential libbz2-dev libboost-all-dev
进入 boost 官网,选择合适的版本,复制其链接,输入如下指令下载 boost
压缩包并解压:
wget https://boostorg.jfrog.io/artifactory/main/release/1.69.0/source/boost_1_69_0.tar.gz
tar -zxcf boost_1_69_0.tar.gz
通过如下指令克隆 muduo 源码:
git clone https://github.com/chenshuo/muduo.git
编译boost
进入 boost 解压后的文件夹,然后运行 bootstrap.sh
编译构建顺序:
cd boost_1_69_0
./bootstrap.sh
完成之后会在当前目录下生成 b2
程序,运行该程序以编译源码:
./b2
完成之后,输入如下命令将编译生成的文件安装在默认的 linux 系统头文件和库文件的搜索路径下:
sudo ./b2 install
通过如下代码,测试 boost 是否安装成功:
#include <iostream>
#include <boost/bind.hpp>
#include <string>
using namespace std;
class Hello
{
public:
void say(string name)
{ cout << name << " say: hello world!" << endl; }
};
int main()
{
Hello h;
auto func = boost::bind(&Hello::say, &h, "zhang san");
func();
return 0;
}
编译muduo
进入 muduo
文件夹,使用 vim 打开 CMakeLists.txt
文件,注释到如下内容
if(CMAKE_PROJECT_NAME STREQUAL "muduo")
# option(MUDUO BUILD EXAMPLES "Build Muduo examples" ON)
endif()
完成之后保存退出。
输入如下命令执行构建程序,然后进行安装:
./build.sh
sudo ./build.sh install
完成之后,在当前目录的父目录中会生成 build
文件夹,进入其中将头文件和库文件拷贝到系统路径下:
cd ../build/release-install-cpp11
cd include
sudo mv muduo /usr/local/include
cd ../lib
sudo mv * /usr/local/lib
测试
输入如下测试代码,构建一个简单的回声服务器:
#include <muduo/net/TcpServer.h>
#include <muduo/base/Logging.h>
#include <boost/bind.hpp>
#include <muduo/net/EventLoop.h>
// 使用muduo开发回显服务器
class EchoServer
{
public:
EchoServer(muduo::net::EventLoop* loop,
const muduo::net::InetAddress& listenAddr);
void start();
private:
void onConnection(const muduo::net::TcpConnectionPtr& conn);
void onMessage(const muduo::net::TcpConnectionPtr& conn,
muduo::net::Buffer* buf,
muduo::Timestamp time);
muduo::net::TcpServer server_;
};
EchoServer::EchoServer(muduo::net::EventLoop* loop,
const muduo::net::InetAddress& listenAddr)
: server_(loop, listenAddr, "EchoServer")
{
server_.setConnectionCallback(
boost::bind(&EchoServer::onConnection, this, _1));
server_.setMessageCallback(
boost::bind(&EchoServer::onMessage, this, _1, _2, _3));
}
void EchoServer::start()
{
server_.start();
}
void EchoServer::onConnection(const muduo::net::TcpConnectionPtr& conn)
{
LOG_INFO << "EchoServer - " << conn->peerAddress().toIpPort() << " -> "
<< conn->localAddress().toIpPort() << " is "
<< (conn->connected() ? "UP" : "DOWN");
}
void EchoServer::onMessage(const muduo::net::TcpConnectionPtr& conn,
muduo::net::Buffer* buf,
muduo::Timestamp time)
{
// 接收到所有的消息,然后回显
muduo::string msg(buf->retrieveAllAsString());
LOG_INFO << conn->name() << " echo " << msg.size() << " bytes, "
<< "data received at " << time.toString();
conn->send(msg);
}
int main()
{
LOG_INFO << "pid = " << getpid();
muduo::net::EventLoop loop;
muduo::net::InetAddress listenAddr(8888);
EchoServer server(&loop, listenAddr);
server.start();
loop.loop();
}
输入如下命令进行编译,然后运行服务器:
g++ main.cpp -lmuduo_net -lmuduo_base -lpthread -std=c++11
./a.out
打开一个新的终端输入如下命令连接服务器:
nc localhost 8888
输入任意字符并按下回车,看其能否回显。
至此,boost 库和 muduo 库便安装成功!
原文地址:http://www.cnblogs.com/tuilk/p/16813371.html
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,请务用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员!
8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性