必要环境

输入如下命令以安装必要的环境:

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. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性