muduo网络库的源码安装

##1下载解压
并同时安装cmake

2 编译

1)修改cmakelist

将CMakelist.txt文件中的option那一行注释掉,因为muduo库源码编译会编译很多unit_test测试用例代码,编译耗时长,我们也用不到。
在这里插入图片描述
2)执行build.sh

运行:

sh build.sh

开始编译,等到编译完成:
在这里插入图片描述

3 安装

运行:

sudo sh build.sh install

这个./build.sh install实际上把muduo的头文件和lib库文件放到了muduo-master同级目录下的build目录下的release-install-cpp11文件夹(分别在include和lib)下面了。

如果在程序中使用muduo中的函数或类的话,首先就是要#include头文件,只包含有文件名系统是找不到的,可以手动在程序中#include头文件的绝对路径。或者方法二是在程序中#include文件名,然后再g++编译选项中设定 -include 选项。

然后是库文件,首先明确的是,编译后的muduo是一个静态库,如果静态库没有放在系统的默认路径下(/usr/local/lib,/usr/lib,/lib),那么在g++编译使用了muduo的程序的时候,需要加上-L选项指定库文件路径。(当然不管库文件是不是在默认路径下, -l选项指定库文件是必须的。)
(如果静态库文件不在默认路径中,似乎不需要像动态库那样还要设定LD_LIBARY_PATH或者/etc/ld.so.conf)。

当然,完全可以将muduo的头文件和库文件放到系统的默认路径下,这样就可以在程序中使用了。只需在编译的时候设定-l选项就行了。(通常/usr/include和/usr/lib放系统的一些头文件和库,/usr/local/include和/usr/local/lib放用户自己安装的一些头文件和库。)

1)将头文件复制到usr/local/include
在这里插入图片描述

2) 将库文件复制到/usr/local/lib
在这里插入图片描述
另外,观察muduo的库,发现确实是静态库:
在这里插入图片描述

4 测试

把muduo库的头文件和lib库文件拷贝完成以后,使用muduo库编写一个简单的echo回显服务器,测试muduo库是否可以正常使用,代码如下:

#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++进行编译,注意链接muduo和pthread的库文件,编译命令如下:

g++ main.cpp -lmuduo_net -lmuduo_base -lpthread -std=c++11

编译链接完成,生成a.out可执行程序,上面的echo服务器监听8888端口,运行上面的a.out回显服务器如下:
在这里插入图片描述

等待客户端连接,可以打开一个新的shell命令行用netcat命令模拟客户端连接echo服务器进行功能测试,命令如下:
在这里插入图片描述

客户端数据回显正确,看看服务器接日志信息也正常,到此,muduo安装成功,能够正常进行C++网络程序开发!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值