zoukankan      html  css  js  c++  java
  • 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 参数”。具体看各人需要吧。 

     

  • 相关阅读:
    百度地图API示例之小实践 添加代理商标注
    百度地图API示例之文本标注
    百度地图API示例之添加自定义控件
    百度地图API示例之添加定位相关控件
    linux crontab 计划任务 atd和windows下的计划任务
    转:PHP教程之PHP调用session_start后页面始终加载的问题研究
    PHP使用empty检查函数返回结果时报Fatal error: Can't use function return value in write context的问题
    Linux命令之yes
    转:Yii实战中8个必备常用的扩展,模块和widget
    转:Yii 常量的轻松管理
  • 原文地址:https://www.cnblogs.com/xiehongfeng100/p/4375613.html
Copyright © 2011-2022 走看看