Boost的使用相关
Boost的部分编译
下载的是boost 1.5版本
首先用vs2010命令提示工具定位到boost1.5目录
./bootstrap.bat
执行脚本生成bjam.exe
再用命令提示符工具输入:bjam --toolset=msvc-10.0 --with-date_time stage
将在bootstrap.bat 的同目录下的stage/lib 下生成date_time的各种lib
命令参考:
--build-dir=<builddir> | 编译的临时文件会放在builddir里(这样比较好管理,编译完就可以把它删除了) |
--stagedir=<stagedir> | 存放编译后库文件的路径,默认是stage |
--build-type=complete | 编译所有版本,不然只会编译一小部分版本(确切地说是相当于:variant=release, threading=multi;link=shared|static;runtime-link=shared) |
variant=debug|release | 决定编译什么版本(Debug or Release?) |
link=static|shared | 决定使用静态库还是动态库。 |
threading=single|multi | 决定使用单线程还是多线程库。 |
runtime-link=static|shared | 决定是静态还是动态链接C/C++标准库。 |
--with-<library> | 只编译指定的库,如输入--with-regex就只编译regex库了。 |
--show-libraries | 显示需要编译的库名称 |
生成的lib名称的含义:
libboost_regex-vc100-sgdp-1_46_1.lib。
前面是库名称,vc100表示编译器,最后面是版本号。下面来解释一下中间那些字符的含义:
版本号中标记的含义 |
表示的含义 |
s |
静态库版本 |
gd |
调试版本 |
p |
使用STLport作为STL实现的版本, |
关于使用stlport编译:http://hi.baidu.com/seuwind7/blog/item/79782fc8f0b1f3e953664f40.html
打开E:\boost_1_5\tools\build\v2下的user-config.jam
第74行去掉注释修改为: using stlport : 5.2.1 : E:/STLport_5_2_1/stlport : E:/STLport_5_2_1/lib ;
(注意看文件开头的说明:冒号和封号的左右两边必须要有空格,Windows下的路径要使用/或者\\)
为使修改的配置配置生效,重新运行bootstrap.bat编译出bjam.exe
编译thread库与使用
我使用的命令是:
bjam stdlib=stlport --toolset=msvc-10.0 --with-thread --stagedir=MYLIB --build-type=complete
还需要编译thread库依赖的date_time库:
bjam stdlib=stlport --toolset=msvc-10.0 --with-date_time--stagedir=MYLIB --build-type=complete
STLport在Debug模式使用时,要定义__STL_DEBUG
STLport与Boost一起在Debug模式下使用时,要在编译器定义预处理器: _STLP_DEBUG
STLport与MFC一起使用的时候,要定义_STLP_USE_MFC
参考:http://dearymz.blog.163.com/blog/static/20565742009221452985/
直接下载编译好的BOOST
http://www.boostpro.com/
- BoostPro 1.51.0 Installer (64-bit) (195K .exe)
- BoostPro 1.51.0 Installer (32-bit) (200K .exe)
64-bit的下载对应的64位的boost库,32-bit的对应32位的
在visual studo 配置管理器中要选择对应的 win32 或者是 x64
使用错的话程序编译是会无法解析BOOST的lib的
取消BOOST的自动链接功能
BOOST默认是采用静态链接的,只需要在项目中指定库的头文件目录,BOOST就会自动链接需要的库
但是在设计一个类库的时候,如果在类库的实现中使用了BOOST,BOOST默认是不会链接到类库中的,当应用使用该类库的时候依然会提示缺少BOOST的lib
这时应该在类库中取消BOOST的自动链接功能,再手动添加需要的lib
取消方法是预定义这个宏:
BOOST_ALL_NO_LIB