VC2005 (VC8) 编译boost 1.31

王朝vc·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

之前没有用过jam,白天在公司上网找了许多资料,在VC2003下成功编译了,满以为2005下不会太难吧,结果忙了我一晚上。现在想来,还是动脑筋太少了。现在把编译过程写下来,以记载这呕心呖血的一晚上,然后我也可以瞑目去睡觉了。

首先是编译jam,在< boost-path >\tools\build\v1下,把vc7.1-tools.jam文件复制一份,改名为vc80-tools.jam,我暂时未测试stl-port。

修改文件内容里的路径,这个不细说了,根据你的安装路径来改。几个flag行就去掉吧,去了以后编译时就少一些warning了。我的文件修改以后内容如下:

extends-toolset msvc ;

# singleton variables...

set-as-singleton VC80_ROOT ;

if ! $(MSVCDir)

{

??? ProgramFiles ?= $(PROGRAMFILES) ;

??? VC80_ROOT ?= $(ProgramFiles:J=" ")"\Microsoft Visual Studio 8\\VC" ;

??? VC_TOOL_PATH = "$(VC80_ROOT)"\bin\ ;

??? VC_SETUP = "CALL \"$(VC_TOOL_PATH)VCVARS32.BAT\" >nul" ;

}

VC_PDB_NAME = vc80 ;

然后在< boost-path >\tools\build\jam-src目录下运行:

build -sTOOLS=vc80

编译会通过的,最后链接时会报错,我到天亮时才想了个蠢办法,表笑我:

.\bootstrap.vc7\jam0 -f build.jam --toolset=vc7 "--toolset-root=C:\Program Files\Microsoft Visual Studio 8\VC"

好了,bjam编译完成。下面编译boost,有2个文件需要改一下:

< boost-path >\boost\config\auto_link.hpp在第118行附近改为:

#elif defined(BOOST_MSVC) && (BOOST_MSVC == 1310)

?? // vc71:

#? define BOOST_LIB_TOOLSET "vc71"

#elif defined(BOOST_MSVC) && (BOOST_MSVC >= 1400)

?? // vc71:

#? define BOOST_LIB_TOOLSET "vc80"

< boost-path >\boost\config\compile\visualc.hpp最后面的>1310改为1400,如下:

#if (_MSC_VER > 1400)

OK了,现在到下,运行如下命令:

tools\build\jam_src\bin.ntx86\bjam -sTOOLS=vc80 "-sBUILD=debug release static/dynamic"

编译完成以后,设置VC2005的include和lib路径,最好搜索一下*.lib,拷到一个文件夹下,现在就可以测试了。

写了一段测试正则表达式的代码,编译、链接,居然报错!原来是要链接多线程版本!在VC2005里找了一下,发现只有多线程选项,单线程竟然没有列进来,真是气死我了。

这中间我走了一点弯路,试图编译一个多线程版本的boost,结果发现不行,编译出来还是单线程的,就线程库是多线程版本。

没办法,再用个蠢办法:在#include < stdafx.h >后面加上一句:#undef _MT,搞定!终于运行起来了,睡觉去。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航