对于C++库,至今我了解的有标准模板库STL(Standard Template Libarary)和准标准库Boost,后者是在图书馆翻阅C++书籍时注意到的。后来在阅读C++经典著作《C++ Primer 4th Ed》和《Effective C++》时也留意到boost的存在。随着时间的推移,潜移默化中感觉到boost库的重要性,因为它是真正意义上的根据C++的设计原则来工作的,除了效率高以外,最重要的是它是开源的。对于我这种想深入学习C++的人[如果你也是,请留下你的联系方式,咱们共勉]而言,不得不说boost的学习是非常有必要的。
时至今日,才算正式进入到了boost的世界,成功执行了一个包含有boost的小程序。
在这里有必要提两点:
一,在学习boost之前有必要了解模块技术和标准库的使用,即template和STL,因为boost中有大量涉及。
二,安装编译boost 和STLport有点考验耐心。我昨天花了五六个小时来了解编译boost,跟着别人的教程一步一步执行,可中途经常出错。因而经常想着放弃学习。最后还是咬牙坚持着成功编译了boost,而且在今天成功运行了一个基于boost的小程序,甚是开心。觉得有必要和大家分享一下编译的方法,独乐乐不如众乐乐,一举多得,自己也可以在忘了后回过头来看一下。另外,实际上大部分是不需要编译而直接使用的,只要在vs中指定include files 和 lib即可。
现在开始尽可能言简意赅,尽可能让大家不出错。
第一步:下载boost 网址:www.boost.org
我下的版本是1.46.0,当时最新版本是1.49.0。进入下载页面后单击boost_1_49_0.7z下载,可用winRar解压。一般解压到D:盘,这个可以随意。
第二步:下载STLport,网址:http://sourceforge.net/projects/stlport/
下载STLport-5.2.1.tar.bz2,用WinRar解压到D:
STLport编译:
1:从“开始”菜单运行VS2010工具的命令提示符Visual Studio 2010 Command Promot
2:执行命令cd d:\STLport,进入该目录
3:执行命令configure msvc10.0
4:执行命令cd d:\STLport\lib
5:执行命令nmake -f msvc.mak clean install
编译几分钟后自动生成*.dll和*.lib在STLport\lib和STLport\bin下面,之后就可以删除STLport\build\lib\obj目录以节约空间。
注意:
如果报错(大致意思是提示你msvc10.0不存在或者它不支持),那么在STLport 目录下搜索_cstdlib.h文件,将其158行改为
#if !defined(_STLP_MSVC) || (_STLP_MSVC < 1600) inline _STLP_LONG_LONG abs (_STLP_LONG_LONG __x) { return __x < 0 ? -__x : __x; } #endif |
boost编译方法见:http://www.cnblogs.com/fullsail/archive/2011/10/07/2200948.html
不过有几点需要纠正, bjam threading=multi --toolset=msvc-10.0 --build-type=complete stdlib=stlport stage
编译之前修改user-config.jam的内容是:
# MSVC configuration.
# -------------------
# Configure msvc (default version, searched for in standard locations and PATH).
# using msvc ;
# Configure specific msvc version (searched for in standard locations and PATH).
using msvc : 10.0 ;//注意这里
# STLPort configuration.
# ----------------------
# Configure specifying location of STLPort headers. Libraries must be either
# not needed or available to the compiler by default.
# using stlport : : /usr/include/stlport ;
# Configure specifying location of both headers and libraries explicitly.
using stlport : : d:/stlport/src:d:/stlport/lib ; //注意这里,两个目录之间用:,而不是空格
最终生成的我们所需的文件在D:\boost_1_46_0\bin.v2\libs和D:\boost_1_46_0\stage\lib当中, bin.v2和stage目录及它们的子目录都是编译时自动创建的,为了使用方便,建议做以下处理:
在bin.v2和stage目录下分别搜索后缀名为 .dll和.lib的文件,然后就它们移动到一个新建目录下,比如boost_files文件夹下。
VS2010的配置:
Configurations: All configurations
VC++ Directories:
Include Directories:D:\STLport\stlport 和 D:\boost
Library Deriectories:D:\STLport\lib和 D:\boost\boost_files
//Configuration Properties->General->Character Set:Not Set
C/C++ ->Code Generation->Runtime Library->Multi Thread.
//C/C++->General->Additional Include Directories:D:\boost
//Linker->General->Additional Include Directories:D:\boost\boost_files
最后需要注意的是,在vs下直接新建一个cpp文件是无法运行的,需要新建一个win32控件台程序,空的,再添加一个cpp文件,这样就可以编译运行了。另外注意,要加上
#include <iostream>
using namespace std;
还有,直接F5运行只会闪一下,而且会提示什么(0x)。按Ctrl+F5就会正常出结果。
或者直接在程序的最后一句加上System("pause");让程序中止一下,就可以看运行结果了。
timer.cpp
#include <boost/timer.hpp>
#include <iostream>
using namespace std;
using namespace boost;
int main()
{
timer t;
cout << "max timespan:" << t.elapsed_max()/3600 << "h" << endl;
cout << "min timespan:" << t.elapsed_min() << "s" << endl;
cout << "time elapsed:" << t.elapsed() << "s" << endl;
system("pause");
}
运行结果:
max timespan:596.523h
min timespan:0.001s
time elapsed:0s
欢迎进入BOOST的世界。