Ubuntu编译boost和muduo
必要环境
输入如下命令以安装必要的环境:
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 库便安装成功!

浙公网安备 33010602011771号