鼠键不离,码不停蹄.|

Leaos

园龄:4年10个月粉丝:33关注:1

2022-10-21 14:30阅读: 270评论: 0推荐: 0

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 库便安装成功!

本文作者:Leaos

本文链接:https://www.cnblogs.com/tuilk/p/16813371.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Leaos  阅读(270)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起