扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
对于Boost已经到了大名鼎盛时期的非凡精神,到了初学者侧目拜视,伸手不能触的情形,粗一些描述你会在网上看到中国式的礼仪性评价-“一群牛人写的,一定有它牛的地方,我方小辈还是仔细学习研究吧!”,而官方的前景看来,Boost Library有可能加入到ISO C++ Standard中,我想这是对Boost所做贡献的肯定,也是整个C++社区的一件大事。而对于我来说,日常使用Boost的环境很少,几乎没有,你知道我是个.NET迷J ,其实到上一篇STLPort和Loki就已经够了。出于对一个新手的体谅,如果我有做得不对和欠缺之处请多提意见。
首先当然是去下载最新的版本,尽管这是众所周知的地方和问题,www.boost.org,最新的版本是1.3.0,下载下来大约10M,我将其解压缩到C:\boost_1_30_0
我的Visual Studio.NET 2003安装在下面的路径:
D:\Program Files\Microsoft Visual Studio .NET 2003\Vc7
之后是比较常见的两个步骤,一个是产生Jam.exe文件,然后是编译boost库,特别是著名的thread库。你会发现boost的许多库是都是通过Include方式来使用的,不用你事先编译,真正编译完成你会发现,如果你使用这些库,是需要自己进行编译的:
Date_time/filesystem/graph/python/regex/signals/test/thread
对应的应该是Date-Time Library/File System Library/Graph Library/Python Library/Regx Library/Signals Library/Test Library/Thread Library
所以往往说编译通过,只指编译这些库文件成功,但这并不意味Visual C++.NET 7.1就完全遵循Boost Library或可以完全使用Boost Library中的所有功能,这就是后面我会提到的,你会发现有些函数和模块在不同程度存在编译或是运行的问题。当然这不仅是VC7.1,几乎所有主流的C++编译器都会这样的问题,这个我们在后面会提到一些。
Boost Library库中存在这样的现象,有些库文件提供了mak文件,我们通过 nmake –f xxx.mak install 可以编译成功或使用它,比如regex/vc7.mak; regex/vc6-stlport.mak 但更多的类库必须通过Boost.jam 的Build System来进行编译,这也是造成Boost编译困难的一个原因吧。
好吧,我们先来编译Jam,这是我们可以继续的一个先决条件:
关于Jam,也有已经预编译好的,你可以取下面的地址,直接download使用,也可以选取自己编译的方式,当然为了验证你的编译器,或是做个热身,你都会选择自己进行编译的J
编译之前,有些问题需要你注意,主要是安装路径和编译器的问题,这里你需要查看两个文件:
C:\boost_1_30_0\tools\build\jam_src\build.bat
C:\boost_1_30_0\tools\build\jam_src\build.jam
对于build.bat的问题是路径问题:
"%ProgramFiles%\Microsoft Visual Studio .NET\VC7\bin\VCVARS32.BAT"
批处理文件是依据这样的判断来寻找VC++的编译器和判断你开发工具的版本,而我的VC安装在这样的目录中D:\Program Files\Microsoft Visual Studio .NET 2003\Vc7结果一定会使得它无法找到编译器,这时你有两个选择,第一是修改build.bat中的路径;第二是设置SET BOOST_JAM_TOOLSET=vc7,SET BOOST_JAM_TOOLSET_ROOT=%ProgramFiles%\Microsoft Visual Studio .NET 2003\VC7\ ;
对于build.jam 的问题问题是cl的参数问题,新版本的cl不支持 /LIBPATH: xxxx的方式,解决这个问题的办法是去掉build.jam文件中对这个参数的使用,并且保证你已经设置了INCLUDE和LIB的环境变量,最简单的办法是执行X:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin\vsvars32.bat 或 D:\Program Files\Microsoft Visual Studio .NET 2003\Common7\Tools\vsvars32.bat。
使用Visual Studio.NET 安装程序组中的Visual Studio.NET 2003 Command Prompt(见上一篇的说明) 这里需要说明,如果你的VC7的安装路径和boost的安装文件相同你并不需要修改它,但是/LIBPATH参数问题一般VC7.0还是VC7.1都是要调整的。
完成之后,你只用执行C:\boost_1_30_0\tools\build\jam_src\build.bat即可,如果没有问题你可以在C:\boost_1_30_0\tools\build\jam_src\bin.ntx86看到编译的结果
我将编译好的Jam.exe和之前修改可以编译的build.bat和build.jam放在一个压缩文件中,你可以到这里进行下载 Build Jam Setup.zip(208K)
好了,进行完成这个之后,算是进行完了一个小段落,我们可以开始向下一步前进,编译Boost Library了,看得出并非一帆风顺。
在使用Jam编译之前,我们还需要做一些准备工作。
1. 将jam.exe所在的路径放入到环境变量PATH中。
执行varvs32.bat ,
SET PATH= C:\boost_1_30_0\tools\build\jam_src\bin.ntx86;%PATH%
2. 修改,接着修改,这次是:
C:\boost_1_30_0\tools\build\vc7-tools.jam
C:\boost_1_30_0\tools\build\msvc-tools.jam
主要的问题,依然是刚刚提到的两个问题,VC7.1编译器的路径和/LIBPATH的参数问题,这里就不一一列举了,你需要查看这两个文件中的某些语句。当然你可以Downlaod我已经修改好的(包括在上面的Build_Jam_Setup.zip中),解开Zip文件后覆盖即可(建议先备份要覆盖的文件)
3. 之后就可以开始进行编译了,一般你使用下面的命令
PATH=C:\boost_1_30_0;C:\boost_1_30_0\tools\build\jam_src\bin.ntx86;%PATH%
SET MSVC_ROOT="D:\Program Files\Microsoft Visual Studio .NET 2003\Vc7"
SET VC7_ROOT="D:\Program Files\Microsoft Visual Studio .NET 2003\Vc7"
SET VISUALC="D:\Program Files\Microsoft Visual Studio .NET 2003\Vc7"
SET JAM_TOOLSET=VISUALC
C:/boost_1_30_0> jam -sBOOST_ROOT=. -sTOOLS=vc7 "-sBUILD=debug release <runtime-link>static/dynamic"
或者是C:/boost_1_30_0>jam -sBOOST_ROOT=. -sTOOLS=vc7 "-sBUILD=debug <runtime-link>static/dynamic"
还有更加有趣的命令,比如:
jam -sBUILD="debug release" -sTOOLS="msvc msvc-stlport" -sVISUALC="\"\"D:\Program Files\Microsoft Visual Studio\VC98\"\"" -sMSVCDir="\"\"D:\Program Files\Microsoft Visual Studio\VC98\"\""
这是我在一家日本网站上看到的,因为这之前我用Google查阅的不少网站,发现两家日本的网站,介绍的非常的详细,由于都是日文,我不大看得懂,但有些地方看拷屏和代码还是非常有帮助和启发的。我把它列出来,希望对你也有帮助和启发:
http://www.kmonos.net/alang/boost/ let’s go boost
http://nazy.s27.xrea.com/boost/index.shtml Nazy's Developer's Site
当然你也可以从Boost.org的官方网站了解到这些信息,我认为有些散乱,整理了一下.
http://www.boost.org/tools/build/build_system.htm
http://www.boost.org/tools/build/jam_src/Jam.html
jam.exe的一些参数意义
a |
Build all targets, even if they are current. |
dx |
Set the debug level to x (0-9) |
fx |
Read x instead of Jambase. |
jx |
Run up to x shell commands concurrently. |
n |
on't actually execute the updating actions. |
ox |
Write the updating actions to file x. |
q |
Quit quickly as soon as a target fails. |
sx=y |
Set variable x=y, overriding environment. |
tx |
Rebuild x, even if it is up |
v |
Print the version of jam and exit. |
--x |
Option is ignored. |
Build 参数可以是下面的语法
BUILD = { option }.
option = [[<compiler>]<variant>]<feature>value1[[/value2]/value3...] | "debug" | "release
Variable |
Default |
Example |
Notes |
TOOLS |
Platform-dependent |
"-sTOOLS=gcc msvc" |
build with gcc and msvc |
-sTOOLS=gcc |
build with gcc | ||
BUILD |
debug |
-sBUILD=release |
build the release variant |
"-sBUILD=debug release" |
build both debug and release variants | ||
"-sBUILD=<optimization>speed" |
build a subvariant of the default variant (debug) with optimization for speed. | ||
"-sBUILD=debug release <runtime-link>static/dynamic" |
build subvariants of the debug and release variants that link to the runtime both statically and dynamically. | ||
ALL_LOCATE_TARGET |
empty |
-sALL_LOCATE_TARGET=~/build |
Generate all build results in the build subdirectory of the user's home directory (UNIX). |
之后是你需要等待,但是这个时间不会太长也就25分钟左右,整个编译完成。
图中Failed是我注释了Test Library的结果,因为之前的几次编译,我发现Test Library无法正常的编译过去。检查上述列举的类库,你会发现类似的路径和编译结果:
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者