win10编译boost

编译命令

boost(我使用的版本是: 1.74.0)的编译相对来说很简单,直接利用项目里自身的东西即可。
当然有一个外部环境需要配一下,就是visulstudio(我这里用的vs2017,然后安装了vs2015的编译工具集)

.\b2.exe --stage-dir="Z:\BASE_ENV\forOpenMVS\boost_1_74_0\vc14" --adress-model=64 toolset=msvc-14.0 --build-type=complete

几点说明:

  • address-model=64属性,生成64位的库;
  • toolset=msvc-14.0,就是指明使用vs2015的编译工具;
  • stage-dir=“Z:\BASE_ENV\forOpenMVS\boost_1_74_0\vc14”,就是说生成的库会位于该目录;
  • build-type=complete,指所boost的所有子项都编译(可以选minimal);

一些常用的选项

suggest:默认参数会将库编译成lib文件,这也是项目中较为常用的boost的存在形式

  • 1 --with- < libname > 仅仅编译名称为欸libname的库,相反的有:–without- < libname >,例如:
./b2.exe --with-system
  • 2 --link=static|shared 指定编译的出来的库是哪种类型的库:
 ./b2.exe --link=static

也就是,当你自己写了程序A调用boost,若boost是dll,则运行时,会动态在dll找你调用的函数的入口地址,然后调用该函数;若boost是lib,则在编译阶段,就已经将lib中的那部分运行代码复制到A中,运行时是不需要该库的。

  • 3 --runtime-link=static|shared 该参数决定了,(假设你写了程序A调用boost库的时候)boost库依赖于的c\c++库是以dll形式还是lib形式参与A的运行。(众所周知: dll可以减少程序体积,但是lib会更快)。

关于boost 的lib的命名方式可以参考https://www.cnblogs.com/happykoukou/p/6992806.html

关于编译的所有选项:

打开 power shell,进入boost的根目录输入:

.\b2.exe --help

编译遇到的问题

1 注意: 出现找不到cl和cstddef的问题多半是环境变量的问题,编辑如下环境变量:
  • 1 path中添加(运行cl.exe): C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\bin\Hostx64\x64
  • 2 添加变量: INCLUDE, 值: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include;C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\shared;C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\winrt;C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um;C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt;
  • 3 添加变量: LIB, 值: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\lib\x64;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.18362.0\um\x64;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.18362.0\ucrt\x64;
2 编译了但是没更新:
  • 2: 编译的boost的iostream库with zlib有问题,zlib说有些符号无法解析:
    • 注意: boost的编译,会将编译结果存在build_dir(bin.v2)中然后拷贝到指定的lib目录下,这就造成,如果需要新编库,必须手动删除build_dir中生成的库文件,否则新编译库是不会overwrite的,而是直接从build_dir中复制到指定的lib目录下,于是: 编译带有zlib的库的时候,需要先将iostream库删除(指定的lib目录和build_dir中的库),然后重新编译
3 cl编译版本出错
  • 3 注意目前我测的是,1_63以及一下的就不要用 toolset=msvc-14.0 ,也就是不用微软的cl编译,不用这个参数默认使用gcc编译

猜你喜欢

转载自blog.csdn.net/cxy_hust/article/details/109263812