boost和STLport在vs2010环境下的编译

时间:2022-09-07 22:08:37

对于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的世界。