AndreaDO

导航

linux安装C++ boost和muduo网络库

linux安装C++ boost和moduo网络库

我的linux是Ubuntu,下面boost和moduo库需要用到的文件放在网盘里面了,链接

安装C++ boost库

在管理员下执行

apt-get install libboost-all-dev

安装完成后使用这条命令

dpkg -l | grep libboost

这个命令会列出所有包含libboost字符串的包,如果输出中有libboost-devlibboost-all-dev,那就说明已经安装了Boost开发包。

查找Boost的头文件通常位于/usr/include/boost/usr/local/include/boost目录下:

find /usr/include -name '*boost*'  
# 或者  
locate boost | grep '/include/boost'

查找Boost的库文件通常位于/usr/lib/usr/local/lib目录下:

find /usr/lib -name '*boost*'  
# 或者  
locate boost | grep '/lib/libboost'

安装完成后我们编写一段代码,名叫test.cpp

//test.cpp
#include <iostream>  
#include <boost/lexical_cast.hpp>  

int main() {  
    int number = 123;  
    std::string str = boost::lexical_cast<std::string>(number);  
    std::cout << "Number as string: " << str << std::endl;  
    return 0;  
}

编译链接该文件

g++ -o test test.cpp -lboost_system

编译成功,运行成功

到这里我们已经安装成功了boost库

安装muduo库

先把muduo压缩包放在目录中

然后解压指令unzip muduo-master.zip ,解压后进入目录中

注意,muduo库源码编译会编译很多unit_test测试用例代码,编译耗时长,我们也用不到,vim编辑上面源码目录里面的CMakeLists.txt文件,如下修改:
注释这一行

保存并退出,继续下面的步骤。

看到有一个build.sh源码编译构建程序,运行该程序(注意:muduo是用cmake来构建的,需要先安装cmake,ubuntu下直接sudo apt-get install cmake就可以,redhat或者centos可以从yum仓库直接安装),然后执行build.sh程序:

./build.sh

等一会编译成功

编译完成后,在输入./build.sh install 命令进行muduo库安装

这个./build.sh install实际上把muduo的头文件和lib库文件放到了muduo-master同级目录下的build目录下的release-install-cpp11文件夹下面了:
如图所见

所以上面的install命令并没有把它们拷贝到系统路径下,导致我们每次编译程序都需要指定muduo库的头文件和库文件路径,很麻烦,所以我们选择直接把inlcude(头文件)和lib(库文件)目录下的文件拷贝到系统目录下:
步骤如图

拷贝完成以后使用muduo库编写C++网络程序,不用在指定头文件和lib库文件路径信息了,因为g++会自动从/usr/include和/usr/local/lib路径下寻找所需要的文件。

编写测试代码,试试看
main.cpp

#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可执行程序,上面的echo服务器监听8888端口,运行上面的a.out回显服务器如下:
输出结果

lirenjie@lirenjie-virtual-machine:~/muduo/cpp_code$ ./a.out
20240308 07:48:29.915922Z 10060 INFO  pid = 10060 - main.cpp:61

然后再开一个终端

我们再回头看看服务器

lirenjie@lirenjie-virtual-machine:~/muduo/cpp_code$ ./a.out
20240308 07:48:29.915922Z 10060 INFO  pid = 10060 - main.cpp:61
20240308 07:55:37.886659Z 10060 INFO  TcpServer::newConnection [EchoServer] - new connection [EchoServer-0.0.0.0:8888#1] from 127.0.0.1:48616 - TcpServer.cc:80
20240308 07:55:37.886717Z 10060 INFO  EchoServer - 127.0.0.1:48616 -> 127.0.0.1:8888 is UP - main.cpp:42
20240308 07:55:37.886783Z 10060 INFO  EchoServer-0.0.0.0:8888#1 echo 6 bytes, data received at 1709884537.886735 - main.cpp:53

到此,muduo安装成功,能够正常进行C++网络程序开发!

posted on 2024-03-08 15:57  AndreaDO  阅读(943)  评论(0)    收藏  举报