CentOS 7下編譯Boost_1_57_0

來源:互聯網
上載者:User

標籤:

  之前對庫的理解太膚淺(現在也仍很膚淺),導致走了挺多的彎路,現記錄以備後查。

  現在可以從Boost官網下載到最新的Boost原始碼boost_1_57_0.tar.gz。

  現將步驟記錄如下:

  1. 解壓(非root)
$tar -xf boost_1_57_0.tar.gz
  2. 執行bootstrap.sh(非root)
$cd boost_1_57_0$./bootstrap.sh
  3. 編譯(非root):./b2 參數

  這時沒有說編譯安裝,是因為在非root賬戶下,編譯安裝過程中產生的各種庫檔案放進去/usr/local/目錄下。

  預設的編譯參數儲存在project-config.jam下,可用vim自己查看。

  ./b2有諸多的參數可以選擇,如下(./b2 --help):

  

  在這裡,我就選擇比較簡單的參數:

$./b2 --without-python stage debug

  編譯時間會比較久,編譯成功後會產生boost目錄(標頭檔)、stage/lib目錄(動態庫及靜態庫)。

  4. 標頭檔及庫檔案拷貝:sudo cp src_dir des_dir

  將編譯產生的boost目錄拷貝至/usr/include/,將stage/lib/下的所有檔案拷貝至/usr/lib64/下,如下:

$sudo cp -rf boost /usr/include$sudo cp -rf stage/lib/* /usr/lib64
  5. 測試

  測試檔案test.cpp:

 1 #include <iostream> 2 #include <string> 3 #include <boost/regex.hpp> 4  5 int main() 6 { 7     std::string str = "192.168.1.1"; 8  9     boost::regex expression("([0-9]+).([0-9]+).([0-9]+)");10     boost::smatch what;11 12     if(boost::regex_search(str, what, expression))13     {14         std::cout << what.size() << std::endl;15         for(size_t i = 0; i < what.size(); i++)16         {17             if(what[i].matched)18             {19                 std::cout << what[i] << std::endl;20             }21         }22     }23 24     return 0;25 }
View Code

  Makefile:

INC_DIR=-I/usr/include/LIB_DIR=-L/usr/lib64/LIB=-lboost_regexCC=g++ -gCFLAGS=-WallEXE=testall:$(CC) $(CFLAGS) $(EXE).cpp -o $(EXE) $(INC_DIR) $(LIB_DIR) $(LIB)clean:rm -rf *.o $(EXE)
View Code  6. 將Boost庫安裝在其他地方

  我們可能並不願意將Boost庫直接安裝到/usr/目錄下,而是/usr/local/下。

$sudo mkdir /usr/local/boost_1_57_0$sudo mkdir /usr/local/boost_1_57_0/include$sudo mkdir /usr/local/boost_1_57_0/lib64$sudo cp -rf boost /usr/local/boost_1_57_0/include$sudo cp -rf stage/lib/* /usr/local/boost_1_57_0/lib64

  因為不是預設安裝在/lib或者/usr/lib目錄下,所以需要修改下/etc/ld.so.cache檔案,將新的庫目錄/usr/local/boost_1_57_0/lib64添加到/etc/ld.so.cache檔案中,步驟如下:

  a) 編輯/etc/ld.so.conf檔案,加入庫檔案所在目錄的路徑

/usr/local/boost_1_57_0/lib64/

  b) 運行ldconfig,該命令會重建/etc/ld.so.cache檔案

  另外,相應的Makefile在編寫的時候需要將標頭檔目錄和庫目錄改為:

INC_DIR=-I/usr/local/boost_1_57_0/include/LIB_DIR=-L/usr/local/boost_1_57_0/lib64/
  7. Boost庫“卸載”

  因為我們只是簡單地拷貝標頭檔和庫檔案,因此,我們直接刪除Boost庫標頭檔和庫檔案就可以了,如下:

$sudo rm -rf /usr/include/boost$sudo rm /usr/lib64/*boost*
  8. 後記

  本人採用的方法相對笨重一點,最好當然就是直接“sudo ./b2 參數”。具體看各人需要吧。 

 

CentOS 7下編譯Boost_1_57_0

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.