muduo库的安装使用

今天开始了陈硕大大的《linux多线程服务端编程》之旅,进行muduo网络库的学习,这里主要记录一下在win11下WSL的ubuntu子系统中进行的muduo的安装。
首先,由于muduo是采用cmake作为build system,所以先要安装cmke,另外由于muduo依赖于Boost(核心库依赖TR1),所以Boost也一并安装了。

sudo apt-get install cmake
sudo apt-get install libboost-dev libboost-test-dev

然后就开始安装muduo吧,书本中介绍muduo原本是在google的代码托管平台进行存放,其实现在已经转移到了github上,所以只需要使用git来客隆一下即可(安装git其实很简单,大家可以百度一下就知道了,这里不做详述)

sudo git clone https://github.com/chenshuo/muduo

因为git的clone命令如果没指定路径,是会把当前目录作为目的路径的,所以我切换到了其他路径,由于权限需要,就使用sudo暂时提升一下权限,搞定以后,就可以看到当前目录下的muduo目录,进入muduo目录,输入./build.sh开始构建,不过它显示ln -sf B U I L D D I R / BUILD_DIR/ BUILDDIR/BUILD_TYPE-cpp11/compile_commands.json和mkdir执行被拒,即permission dennied,这下头疼了,只好进行build.sh脚本的命令修改,在这两个命令和后面的cmake命令和make命令都添加sudo前缀,这样执行就不会有问题了。
如下:

#!/bin/sh

set -x

SOURCE_DIR=`pwd`
BUILD_DIR=${BUILD_DIR:-../build}
BUILD_TYPE=${BUILD_TYPE:-release}
INSTALL_DIR=${INSTALL_DIR:-../${BUILD_TYPE}-install-cpp11}
CXX=${CXX:-g++}

sudo ln -sf $BUILD_DIR/$BUILD_TYPE-cpp11/compile_commands.json

sudo mkdir -p $BUILD_DIR/$BUILD_TYPE-cpp11 \
  && cd $BUILD_DIR/$BUILD_TYPE-cpp11 \
  && sudo cmake \
           -DCMAKE_BUILD_TYPE=$BUILD_TYPE \
           -DCMAKE_INSTALL_PREFIX=$INSTALL_DIR \
           -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
           $SOURCE_DIR \
  && sudo make $*

# Use the following command to run all the unit tests
# at the dir $BUILD_DIR/$BUILD_TYPE :
# CTEST_OUTPUT_ON_FAILURE=TRUE make test

# cd $SOURCE_DIR && doxygen

不过,./build.sh执行完毕,只在/usr/include/build目录中找到release目录(内含bin目录和lib目录,即可执行文件和静态库文件),并没有我们需要的头文件和库文件,回头看书,发现应该执行./build.sh install命令才有想要的release-install目录,但是执行时cmake报错了,为何?因为它找不到protobuf和curl的依赖,哦豁,忘记安装了

sudo apt-get install libcurl4-openssl-dev libc-ares-dev
sudo apt-get install protobuf-compiler libprotobuf-dev

这样一来,就基本编译好了我们需要的头文件和库文件了,让我们运行一下看看,切换到release-cpp11(我们生成的build目录下,即前面说的release目录,这个名字应该是更新了c++11标准)的bin目录下,运行一下测试程序inspector_test

jack@DESKTOP-SJO8SMG:/usr/include/build/release-cpp11/bin$ ./inspector_test
20211210 14:43:57.949897Z  4627 WARN  HttpServer[Inspector:test] starts listening on 0.0.0.0:12345 - HttpServer.cc:53

应该可以得到上面的响应,然后我们在浏览器访问本地ip的12345端口(http://127.0.0.1:12345/)应该可以得到以下界面
在这里插入图片描述
然后我们的服务器程序响应如下:

20211210 14:45:09.441062Z  4627 INFO  TcpServer::newConnection [Inspector:test] - new connection [Inspector:test-0.0.0.0:12345#1] from 127.0.0.1:33248 - TcpServer.cc:80
20211210 14:45:09.441768Z  4627 INFO  TcpServer::newConnection [Inspector:test] - new connection [Inspector:test-0.0.0.0:12345#2] from 127.0.0.1:33250 - TcpServer.cc:80
20211210 14:47:20.255819Z  4627 INFO  TcpServer::removeConnectionInLoop [Inspector:test] - connection Inspector:test-0.0.0.0:12345#2 - TcpServer.cc:109

这样应该就ok了。

猜你喜欢

转载自blog.csdn.net/weixin_44948269/article/details/121865733
今日推荐