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++網絡庫》