基於c++的網路開發庫boost.Asio學習 (一) Ubuntu安裝boost以及問題解決
- 執行環境:Ubuntu 12.04
- 版本: boost 1.68
- 下載網址:http://sourceforge.net/projects/boost/files/boost/1.58.0/boost_1_58_0.tar.bz2/download
- 下載出來一個安裝包
- 將安裝包移動到合適的檔案目錄下,解壓縮出現一個boost目錄
- 下面按照個人需要下載一下依賴的庫
sudo apt-get install mpi-default-dev sudo apt-get install libicu-dev #建議下載 sudo apt-get install python-dev #這個我就沒下了,不怎麼用得到 sudo apt-get install libbz2-dev #這個要下一下
下載完畢之後進入boost目錄
執行編譯指令
./bootstrap.sh
編譯完畢之後需要再次執行b2 等很久
./b2 -a -sHAVE_ICU=1 # 前面下了一個icu的依賴,這裡面可以使用
最後安裝
sudo ./b2 install //開始安裝
測試程式碼隨便拷的別人的,下面有連結
#include <iostream> #include <boost/timer.hpp> using namespace boost; int main() { timer t; std::cout << "max timespan:" << t.elapsed_max() / 3600 << "h" << std::endl; std::cout << "min timespan:" << t.elapsed_min() << "s" << std::endl; std::cout << "now itme elapsed:" << t.elapsed() << "s" << std::endl; return EXIT_SUCCESS; } --------------------- 作者:guoyunfei20 來源:CSDN 原文:https://blog.csdn.net/guoyunfei20/article/details/76013892?utm_source=copy
以上步驟沒什麼難度,但是由於大家使用的linux的shell不一定一樣,在測試編譯的時候一開始是這樣的
g++ -Wall test.cpp -lboost_system -lboost_filesystem -o test //行不通啊
In function `boost::asio::detail::posix_thread::~posix_thread()':
test.cpp:(.text._ZN5boost4asio6detail12posix_threadD2Ev[_ZN5boost4asio6detail12posix_threadD5Ev]+0x1d): undefined reference to `pthread_detach'
In function `boost::asio::detail::posix_thread::join()':
test.cpp:(.text._ZN5boost4asio6detail12posix_thread4joinEv[boost::asio::detail::posix_thread::join()]+0x25): undefined reference to `pthread_join'
連結錯誤,找不到`pthread_detach'函式什麼的,其實到這裡就可以看出需要新增pthread,
但我居然以為是boost_thread的問題,而且我的程式裡面並沒有設定執行緒,可能是內部函式跑
這些個函式,錯誤一大串。
也就是說對於Ubuntu來說,必須要連結pthread
在看別人的部落格的時候發現,好像 -lpthread 也可以 有的不要加l,這個還是與gcc版本有關,我的gcc版本是4.6.3
我試了兩種居然都可以,加不加l都可以的樣子。當然僅僅針對與pthread這個連結
檢視gcc版本
gcc --version
接下來就是寫Makefile,今天也是沒有分析好錯誤的原因,導致一直不能編譯成功