设为首页 加入收藏

TOP

VS2008下Boost库的安装编译
2014-11-23 21:36:28 来源: 作者: 【 】 浏览:11
Tags:VS2008 Boost 安装 编译

下载boost库(最好去官网下,一般有SGI(GCC+用的较多)和BOOST之分,VS下用BOOST)


http://sourceforge.net/project/showfiles.php group_id=7586&package_id=8041


http://sourceforge.net/projects/boost/files/boost-docs/1.52.0/


下载boost_1_55_0(最新版本执行方法一样,改下名字即可)压缩文件,解压缩到d:\boost_1_55_0\(可以任何位置,你觉得合适就可以)目录下
1.编译bjam
从开始->程序->Microsoft Visual Studio 2008->Visual Studio Tools->Visual Studio 2008 命令提示(一定要从这进),命令提示cd到d:\boost_1_55_0\下执行bootstrap.bat,会在d:\boost_1_55_0\产生bjam.exe。
2.编译boost
命令提示cd到d:\boost_1_55_0\下执行
bjam --without-python --toolset=msvc-9.0 --prefix=d:\boost install
  参数说明
  --without-python 表示不使用 python
  --toolset : 所使用compiler,Visual Studio 2008為msvc-9.0
  --prefix:指定编译后library的安裝目录
  这一步要花很长时间(大约20分钟),看你的电脑速度
3.设定vs2008环境
启动vs2008->工具->选项-> 项目和解决方案 -> VC++目录(Tools->Options->Project and Solutions->VC++ Directories)
下拉 库文件 加上d:\boost\lib
下拉 包含文件 加上d:\boost\include\boost-1_55
这样基本已经完成了!
注意:如果发现libboost_regex-vc80-mt-gd-1_34_1.lib之类文件提示错误时,是找不到该文件!
就到D:\boost\lib把对应的文件libboost_regex-vc90-mt-gd-1_55.lib改为libboost_regex-vc80-mt-gd-1_55.lib(可以用记事本或者写字板打开,然后保存)就可以一般是80和90的差别(2005是80,2008是90)


不知说的够详细不,希望不清楚的同学留言,我每天都登陆,可以帮忙解决问题。


可以使用 bjam --help查看帮助。下面是编译共享和静态的参数。


bjam stage --toolset=msvc-9.0 --stagedir="d:\boost\lib\"link=shared runtime-link=shared threading=multi debug release


bjam stage --toolset=msvc-9.0 --stagedir="d:\boost\lib\"link=staticruntime-link=staticthreading=multi debug release


Boost官网的《Geting Started On Windows》(http://www.boost.org/doc/libs/1_38_0/more/getting_started/windows.html)提到了Boost库的命名,摘录如下:


以 libboost_regex-vc71-mt-d-1_34.lib 为例:


下表是对Regex库编译后的文件名:




需要注意的是,链接时,所使用的Regex库文件名必须和编译选项匹配,否则会造成如下链接错误:


LINK : warning LNK4098: defaultlib '×××××' conflicts with use of other libs; use /NODEFAULTLIB:library


原因是,当编译时,cl.exe(也就是VC的编译器)会根据上述编译选项在编译成的obj文件中植入相应的defaultlib文件名(使用DUMPBIN /DIRECTIVE ***,lib可以查看),如/MT对应的就是LIBCMT.LIB(C)和LIBCPMT.LIB(C++标准库)。当链接器处理该obj文件时,会从文件中取出该defaultlib文件名,将其放在命令行库列表的最后以供使用。对于静态库的处理也是如此,静态库也是由一些obj文件组成的,每个obj文件中也根据当时的编译选项被植入了相应的defaultlib。当链接器处理静态库时,也会将涉及到的obj文件中的defaultlib放在命令行库列表的最后。假设,我们的程序使用/MT编译,那个对应的defaultlib就是LIBCMT.LIB(C)和LIBCPMT.LIB(C++标准库)。而使用的是libboost_regex-vc90-mt-sgd-1_38.lib,它对应的defaultlib就是LIBCMTD.LIB和LIBCPMTD.LIB。链接过程中,链接器会发现采用了不同的运行时库,所以会出现上述错误。


幸运的是,Visual C++支持自动链接,当包含Regex的头文件时,Regex会根据当前工程的编译选项(不同的编译选项会定义不同的宏,具体参见上一篇C运行时库)自动告诉编译器将哪个文件送给链接器。


Boost.Regex默认使用的静态链接方式,如果希望使用动态链接方式,如何实现呢? 定义宏BOOST_REGEX_DYN_LINK。要注意,一定要在包含regex头文件之前定义该宏:


关于此宏的解释参见 http://www.boost.org/doc/libs/1_38_0/libs/regex/doc/html/boost_regex/configuration/linkage.html


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Boost 库安装、编译问题笔记 下一篇VS2008下直接安装使用Boost库1.46..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: