CentOS 7下編譯安裝Boost_1_57_0


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

  現在可以從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_regex

CC=g++ -g
CFLAGS=-Wall
EXE=test

all:
	$(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 參數”。具體看各人需要吧。 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM