muduo安装和运行
为补充C++工程知识近期打算学习muduo源码,下面记录muduo源码编译链接及运行过程。
0.版本
操作系统ubuntu 14.04及以上,gcc-8.3.0,cmake-3.13.4
1.安装必要的环境、依赖、工具
安装cmake,boost,curl,protobuf.
sudo apt-get install cmake -y
sudo apt-get install libboost-dev libboost-test-dev -y
sudo apt-get install libcurl4-openssl-dev linc-ares-dev -y
sudo apt-get install protobuf-compiler libprotobuf-dev -y
2.下载源码,这里我们clone到版本0.8.2
git clone -b v0.8.2 https://github.com/chenshuo/muduo.git
3.编译源码,如果顺利的话,在../build/debug/{bin,lib}
中能看到可执行文件和库
cd muduo
./build.sh -j2
4.运行一个样例,在浏览器中键入http://localhost:12345
即可观察到结果
./inspector_test
—————————————————
可能出现的错误及解决方案:
编译链接中可能会出现错误
问题1:.error: cannot convert ‘const boost::shared_ptrmuduo::TimeZone::Data’ to ‘bool’ in return
bool valid() const { return data_; }
方案: 智能指针无法判空,不过这个错误很奇怪,但是可以用下面代码勉强解决它。
bool valid() const
{
if (data_)
return true;
else
return false;
}
问题2: error: typedef ‘T_must_be_complete_type’ locally defined but not used [-Werror=unused-local-typedefs]
方案 muduo将编译中出现的warning视为error,如果我们能容忍warning,可以将其取消,即在CMakelists.txt中添加-Wno-unused-local-typedefs
问题3: undefined reference to `google::protobuf::Arena:😮…
方案: 看到undefined reference…错误大概率会想到是链接库在编译链接过程中没链接进去,OK,果然是这个原因,然后在CMakelists.txt中添加动态库位置,link_directories(/usr/local/lib/)
,解决之。
—————————————————
参考资料:
https://blog.csdn.net/u013944212/article/details/88086804
https://sqh.me/tech/install-muduo-undefined-reference-to-in-ubuntu/
https://www.cnblogs.com/binbinjx/p/5626916.html
《Linux多线程服务端编程使用muduo C++网络库》