这是系列文章的第2/7篇
1.VS2013-Qt5.5.1-动态编译-VTK7.0.0
2. VS2013-MPI v7-静态编译-Boost1.6.1
3.VS2013-编译-Qhull2015.2
4.VS2013-编译-FLANN1.8.4
5.VS2013-编译-Eigen3.2.8
6.OpenNI2.2.0.33下载和安装
7. VS2013-Qt5.5.1-VTK7.0.0-Boost1.6.1-Qhull2015.2-FLANN1.8.4-Eigen3.2.8-OpenNI2.2.0.33-动态编译-PCL1.8.0
此次编译Boost1.6.1,采用VS2013,在X64下编译debug和release两个版本,所依赖的MPI版本是7.0.12437.6版.
1
下载Microsoft MPI v7
编辑这篇文章时,最新的MPI发布版是7.0.12437.6版.
msmpisdk.msi和MSMpiSetup.exe都需要下载.
2
安装Microsoft MPI v7
msmpisdk.msi和MSMpiSetup.exe都需要安装,最好默认安装.前者会默认安装到C:\Program Files (x86)\Microsoft SDKs\MPI;后者会默认安装到C:\ProgramFiles\Microsoft MPI;并会自动设置环境变量.
3
下载Boost
Boost官网主页(https://www.boost.org/)列出的就是最新版本的boost库源码,官方不提供预编译版本.
Version 1.61.0(https://www.boost.org/users/history/version_1_61_0.html)和Release Notes(https://www.boost.org/users/history/version_1_61_0.html)链接到同一个页面,该页面提供了源码下载,也提供了跳转到第三方网盘的链接(有预编译版本).Download(https://sourceforge.net/projects/boost/files/boost/1.61.0/)跳转到第三方网盘(提供源码下载).
这个页面其实是当前版本Boost库的完整发布说明,包含documentation链接,Download链接,Third Party Downloads链接,New Libraries(当前版本新增加的库)说明,UpdatedLibraries(当前版本更新的库)说明,Compilers Tested说明等.如下图:
download跳转到第三方网盘如下图,随便下载哪个都一样,只是压缩格式不同而已。
4
.解压Boost
解压Boost,本文解压到下列路径:
找到D:\Boost\1.6.1\Src\boost_1_61_0\tools\build\src\tools\mpi.jam文件,修改mpi.jam文件如下:
注:boost项目对微软的MPI似乎很久没管了,所以需要修改一下相关参数,才能正确应用MS-MPI
5
打开
VS2013 x64 Native Tools Command Prompt
本文使用VS2013,编译64位的boost.
切换到boost源码目录,cd /d “D:\Boost\1.6.1\Src\boost_1_61_0”
执行bootstrap.bat,如下图:
等一会儿后,生成四个文件如下:
b2.exe,bjam.exe这两个exe作用是一样的,bjam.exe是老版本,b2是bjam的升级版本.
b2 --help 查看帮助,非常有用.
6
打开project-config.jam
添加using mpi ;如下图:
注意;左右都有空格
7
编译并安装
b2 --toolset=msvc-12.0 address-model=64 --build-dir="I:\build\boost" install --prefix="D:\Boost\1.6.1\msvc2013_64"--without-graph_parallel --without-python -j8
b2.exe toolset=msvc-12.0 address-model=64--build-dir=build\x64 install --prefix="E:\杨帆文件\软件\PCL文件\boost\1.6.1\msvc2013_64"-j8
各个参数什么意思,b2 --help说得很清楚.大部分参数都可以使用默认值,所以只指定了有必要修改的几个参数.
address-model=64必须要,就算是用X64命令行,依然要加这个参数才OK.编译32位用address-model=32.不加这个参数,默认是32.--help里面并没有提到这个参数.
--without-graph_parallel是因为这个模块编译一直出错,所以干脆不编译它了.
--without-python是因为单纯地不想要python.
-j8是并行编译线程数.
注:bjam在编译过程中,出错不会停下来,而是直接跳过出错的模块,除非加参数让其遇错停下.而且是边编译边安装.
测试时用的参数,直接无视就好
b2--toolset=msvc-12.0 address-model=64 --build-dir="I:\build\boost"stage --stagedir="I:\build\boost" --without-graph_parallel--without-python -j8 -q
可以用dumpbin去检查lib/dll是X86还是X64
dumpbin/headers *.lib | findstr machine
dumpbin/headers *.dll | findstr machine
间接确定某个lib是静态还是动态[会显示其它信息或者对应的dll]
dumpbin/headers *.lib
直接确定某个lib是静态还是动态[会列出包含的obj或者对应的dll]
lib /list*.lib
8
Boost安装目录分析
[include]文件夹装的是包含目录,D/R版本的内容完全一样.
[lib]文件中,装的都是staticlib文件,D/R版本各有34个lib.
lib一一对应,但内容不一样.
控制台编译,没有生成PDB.
因为是静态编译,所有没有dll,也没有[bin]文件夹.
静态编译通常没有PDB.