https://www.jianshu.com/p/de1fda741beb

https://www.cnblogs.com/weizhixiang/p/5804778.html

Windows编译


生成boost的自用的编译工具bjam.exe

解压后,使用Visual Studio 编译。首先打开“Developer Command”,cd到boost解压后的根目录:
cd X:\boost_X_XX_X

执行bootstrap.bat,会在boost根目录生成 b2.exe 、bjam.exe 、project-config.jam 、bootstrap.log四个文件。其中,b2.exe 、bjam.exe 这两个exe作用是一样的,bjam.exe 是老版本,b2是bjam的升级版本。

使用bjam(或b2)来编译boost

bjam命令参数分析
以下面的命令作为示例来分析各个参数的作用
bjam stage --toolset=msvc-14.0 --without-python --stagedir="X:\boost\vc14" link=static runtime-link=shared runtime-link=static threading=multi debug release

  1. stage/install:
    stage表示只生成库(dll和lib),install还会生成包含头文件的include目录。推荐使用stage,因为install生成的这个include目录实际就是boost安装包解压缩后的boost目录(X:\boost_X_XX_X\boost,只比include目录多几个非hpp文件,都很小),所以可以直接使用,而且不同的IDE都可以使用同一套头文件,这样既节省编译时间,也节省硬盘空间。

  2. toolset:
    指定编译器,可选的如borland、gcc、msvc(VC6)、msvc-12.0(VS2013)、msvc-14.0(VS2015)等。

  3. without/with:
    选择不编译/编译哪些库。因为python、mpi等库我都用不着,所以排除之。还有wave、graph、math、regex、test、program_options、serialization、signals这几个库编出的静态lib都非常大,所以不需要的也可以without。这可以根据各人需要进行选择,默认是全部编译。但是需要注意,如果选择编译python的话,是需要python语言支持的,可以到python官方主页下载安装。
    查看boost包含库的命令是bjam --show-libraries。

  4. stagedir/prefix:
    stage时使用stagedir,install时使用prefix,表示编译生成文件的路径。推荐给不同的IDE指定不同的目录,如VS2015对应的是

X:\boost_X_XX_X\vc14

如果使用了install参数,那么还将生成头文件目录,vc14对应的就是

X:\boost_X_XX_X\boost\bin\vc14\include\boost_X_XX_X\boost

  1. build-dir:
    编译生成的中间文件的路径。这个本人这里没用到,默认就在根目录(X:\boost_X_XX_X\boost)下,目录名为bin.v2,等编译完成后可将这个目录全部删除(没用了),所以不需要去设置。

  2. link:
    生成动态链接库/静态链接库。生成动态链接库需使用shared方式,生成静态链接库需使用static方式。一般boost库可能都是以static方式编译,因为最终发布程序带着boost的dll感觉会比较累赘。

  3. runtime-link:
    动态/静态链接C/C++运行时库。同样有shared和static两种方式,这样runtime-link和link一共可以产生4种组合方式,各人可以根据自己的需要选择编译。

  4. threading:
    单/多线程编译。一般都写多线程程序,当然要指定multi方式了;如果需要编写单线程程序,那么还需要编译单线程库,可以使用single方式。

  5. debug/release:
    编译debug/release版本。一般都是程序的debug版本对应库的debug版本,所以两个都编译。

配置


包含头文件的Include路径:X:\boost_X_XX_X
包含库文件的链接路径:X:\boost_X_XX_X\bin\vc14\lib

  1. 可以设置为仅用于当前project:
    选中当前project->Properties->Configuration Properties->C/C++->General: Additional Include Directories: 设置 X:\boost_X_XX_X
    选中当前project->Properties->Configuration Properties->Linker->General: Additional LibraryDirectories: 设置 X:\boost_X_XX_X\bin\vc14\lib

  2. 可设置为仅用于当前Solution:
    选中当前project->Properties->Configuration Properties->VC++ Directories:
    Include Directories: 设置 X:\boost_X_XX_X
    LibraryDirectories: 设置 X:\boost_X_XX_X\bin\vc14\lib

  3. 可设置为OS当前用户下的VC++环境(当前用户下VC++所创建的所有Solution)
    在某个已打开的工程下,切换到Property Manager 选项卡,然后然后展开当前工程的properties配置,打开Microsoft.Cpp.Win32.User
    选择Common Properties->VC++ Directories:
    Include Directories: 设置 X:\boost_X_XX_X
    LibraryDirectories: 设置 X:\boost_X_XX_X\bin\vc14\lib
    这样设置的仅在Win32编译选项下起作用,x64编译选项需要另外配置x64的properties sheet。

4.可设置为OS所有用户下的VC++环境
可以编辑 Microsoft.Cpp.Default.props 、Microsoft.Cpp.props 。这里就不介绍了。

References


 

Linux下编译使用boost库:

Boost是什么不多说, 下面说说怎样在Linux下编译使用Boost的所有模块.

1. 先去Boost官网下载最新的Boost版本, 我下载的是boost_1_56_0版本, 解压.

2. 进入解压后目录: cd boost_1_56_0, 执行下面的命令:

$ ./bootstrap.sh --prefix=path/to/installation/prefix

prefix的值是你希望安装boost的路径, 不开启此参数的话默认安装在 /usr/local 下. 我安装在 /home/xzz/boost_1_56_0目录下:

$ ./bootstrap.sh --prefix=/home/xzz/boost_1_56_0

Note: 家目录不要用 ~ 表示, 编译脚本不识别 ~, 会在当前目前新建一个名为 '~' 的目录.

接着执行:

$ ./b2 install

这条命令把boost的头文件文件夹 include/ 安装在prefix定义的目录中, 并且会编译所有的boost模块, 并将编译好的库文件夹 lib/ 也放在prefix定义的目录中. 所有如果成功编译的的话, prefix目录即 /home/xzz/boost_1_56_0目录应当包含有 include/ 和 lib/ 两个文件夹.

3. 测试

先测试只依赖头文件的功能模块:

将下面的代码保存为 test.cpp:

  1. #include <boost/lambda/lambda.hpp>
  2. #include <iostream>
  3. #include <iterator>
  4. #include <algorithm>
  5. int main()
  6. {
  7. using namespace boost::lambda;
  8. typedef std::istream_iterator<int> in;
  9. std::for_each(
  10. in(std::cin), in(), std::cout << (_1 * 3) << " " );
  11. }

编译

$ g++ test.cpp -o test -I /home/xzz/boost_1_56_0/include

-I: 大写的i, 指定头文件搜索目录

执行 ./test 测试, 输入一个数, 返回这个数乘3的值.

再测试需要用到二进制库的功能模块:

将下面的代码保存为 test.cpp:

  1. #include <iostream>
  2. #include <boost/filesystem.hpp>
  3. using namespace boost::filesystem;
  4. int main(int argc, char *argv[])
  5. {
  6. if (argc < 2) {
  7. std::cout << "Usage: tut1 path\n";
  8. return 1;
  9. }
  10. std::cout << argv[1] << " " << file_size(argv[1]) << std::endl;
  11. return 0;
  12. }

编译的时候需要注意:

$ g++ test.cpp -o test -I /home/xzz/boost_1_56_0/include -L /home/xzz/boost_1_56_0/lib -lboost_system -lboost_filesystem

-L: 后接boost库文件夹

-l: 这是小写的 L, 接源文件编译所需用到的库文件, 注意使用 -l 要注意, 库文件之间也存在依赖关系, 比如这里 boost_filesystem 库依赖于boost_system 库, 所以boost_filesystem 要写在后面, 否则可能会出现符号解析错误. 下面是 man g++ 里的一段话.

引用It makes a difference where in the command you write this option; the linker searches and processes libraries and object files in the order they are specified. Thus, foo.o -lz bar.o searches library z after file foo.o but before bar.o. If bar.o refers to functions in z, those functions may not be loaded.

执行 ./test, 这个时候会出现一个问题:

./test: error while loading shared libraries: libboost_system.so.1.56.0: cannot open shared object file: No such file or directory

原因是在存在动态库和静态库时, gcc优先使用动态库, 但动态库在linux下默认搜索路径是/lib, /usr/lib/usr/local/lib. 所以程序运行的时候出错. 解决办法可以将动态库拷贝到动态库的搜索路径下. 也可以使用 -static 参数指定程序使用静态库. 这篇博客里面提供了更多解决方案. 改为使用下面的命令编译:

$ g++ test.cpp -o test -I /home/xzz/boost_1_56_0/include -L -static /home/xzz/boost_1_56_0/lib -lboost_system -lboost_filesystem

执行 ./test, 输出

Usage: tut1 path

如果两个用例都成功编译了, 那么恭喜你, boost库安装成功.

作者:elivera
链接:https://www.jianshu.com/p/de1fda741beb
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

C++ Boost库的编译及使用的更多相关文章

  1. Linux下boost库的编译、安装详解

    下载boost源码 boost下载地址 解压到一个目录 tar -zxvf boost_1_66_0.tar.gz 编译boost库 进入boost_1_66_0目录中 cd boost_1_66_0 ...

  2. Linux下编译boost库和qt和ImageMagick

    需要把整个PCIE的工程移植到Linux下,当初就是用cmake来管理的工程的.但是命令行之类的还是需要改动.改动还不少,cmake里面很多东西都依赖于windows.包括我用cmake重新管理的工程 ...

  3. [转]Linux编译和安装boost库

    1. 下载boost安装包并解压缩 到http://www.boost.org/下载boost的安装包,以boost_1_58_0.tar.gz为例 下载完成后进行解压缩: tar zxvf boos ...

  4. boost库生成文件命名和编译

    生成文件命名规则:boost中有许多库,有的库需要编译.而有的库不需要编译,只需包含头文件就可以使用.编译生成的文件名字普遍较长,同一个库根据编译链接选项不同,又可以生成多个不同名字的文件.生成的文件 ...

  5. QT windows msvc下使用boost库(备忘)

    win32-msvc2015: { contains(QMAKE_HOST.arch, x86):{ INCLUDEPATH += D:\3SDK\boost_1_61_0 LIBS += -LD:\ ...

  6. Qt中使用Boost库

    关于boost库的编译,请看https://www.cnblogs.com/HackerArt/p/10539516.html 网上可以查到很多介绍qt使用库文件的教程,但是大多都没有注意到,qt中支 ...

  7. Boost库安装理解

    Boost安装的安装,以及在VS2013下的使用 1. 为什么要安装? boost是一个开源库,因为开源库可以跨平台,可以通过在不同的“硬件”平台上.所以需要安装的操作. 安装,然后编译生成“静态链接 ...

  8. 新手,Visual Studio 2015 配置Boost库,如何编译和选择,遇到无法打开文件“libboost_thread-vc140-mt-gd-1_63.lib“的解决办法

    1,到官网下载最新的boost,www.boost.org 这里我下载的1-63版本. 2,安装,解压后运行bootstrap.bat文件.稍等一小会就OK. 3,编译boost库.注意一定要使用VS ...

  9. linux下编译安装boost库

    linux下编译安装boost库 linux下编译安装boost库 1.下载并解压boost 1.58 源代码 下载 解压 2.运行bootstrap.sh 3.使用b2进行构建 构建成功的提示 4. ...

随机推荐

  1. 块设备驱动——ramblock

    一. 什么是块设备. 1.1. 一种具有一定结构的随机存取设备,对这种设备的读写是按块进行的,他使用缓冲区来存放暂时的数据,待条件成熟后,从缓存一次性写入设备或者从设备一次性读到缓冲区.可以随机访问, ...

  2. 安装libpng库

    一. 安装libpng库前需要先安装zlib库,libpng库依赖zlib库 1.1. zlib库安装 1.1.1. 下载地址:http://www.zlib.net/ 1.1.2. 解压后得到zli ...

  3. vscode学习(三)之如何修改打开终端的默认shell

    实现 第一步:打开VSCode的设置(Preferences>User Settings) 第二步:搜索terminal.integrated.shell.osx 的 并把它的值改为你的zsh安 ...

  4. JavaEE高级-MyBatisPlus学习笔记

    第 1 章 简介 1.1 MyBatisPlus 介绍 -MyBatis-Plus(简称 MP),是一个 MyBatis 的增强工具包,只做增强不做改变. 为简化开发工作.提高生产率而生我们的愿景是成 ...

  5. github配置及使用

    安装git 对于linux系统,不同发行版本的安装方法不一样,请参考https://git-scm.com/download/linux.以ubuntu为例: sudo add-apt-reposit ...

  6. VMware Workstation 卸载时卡在“正在卸载网络驱动程序(Virtual Network Editor夯死)”

    出现此种问题,以下方式均无法成功卸载: 控制面板-卸载程序(Virtual Network Editor 未响应) Geek 卸载VMware Workstation(Virtual Network ...

  7. linux系统特殊权限位 suid、sgid、sticky

    linux系统特殊权限位 suid.sgid.stickysuid 使任意用户获得用文件属主相同的权限,sgid使用户获得与文件属组相同的权限(通过sgid获得的权限等同于同一用户组的权限) 表示方法 ...

  8. PAT Advanced 1006 Sign In and Sign Out (25 分)

    At the beginning of every day, the first person who signs in the computer room will unlock the door, ...

  9. Java Annotation 刷课笔记(一)

    1.什么是注解? 1.1.Annotation是从JDK5.0引入的新技术 1.2.Annotation的作用: 不是程序本身,可以对程序作出解释(这一点,和注释没什么区别) 可以被其他程序(比如编译 ...

  10. 09java进阶——IO

    1.File类 1.1目录及路径分隔符 package cn.jxufe.java.chapter09.demo01; import java.io.File; public class Test01 ...