Eureka!

Keep thinking.

导航

Nice to meet you, STL.

Posted on 2008-09-25 00:01  Kid.Loki  阅读(945)  评论(0编辑  收藏  举报

当你觉得有必要重新认识一个朋友的时候,你该像初次见面那样热情地向他打个招呼:

Nice to meet you, STL!

1、STL标准及其实现版本

网上介绍很多,不打算重复。这里主要是列出资源,以飨诸君。

(1)C++03标准(ISO/IEC 14882:2003(E))

这是C++98(ISO/IEC 14882:1998(E))的扩充版,正规获取手段是向ISO交纳一笔费用,不过网上可以下到pdf文档,也可以找到96年的草案(ANSI/ISO C++ Draft Standards)。

(2)HP STL:Hewlett-Packard Company的实现,open source,是最早的STL实现版本,亦是所有版本的始祖。似乎已绝迹。

(3)Safe STL:Horstmann Software Design, Corp.的实现,但似乎是C. S. Horstmann个人负责,open source,影响不大,各种资料鲜有提及。源码和说明可从Horstmann的个人主页上下载。

(4)SGI STL:Silicon-Graphics Computer Systems, Inc.的实现,open source,linux平台上好用可读的版本,源码和文档可从SGI STL主页获得。

(5)STLport:源于将SGI STL向各个平台的各个编译器迁移的尝试,open source,源码可从STLport主页获得。

(6)PJ STL:P. J. Plauger的个人版本,非open source,以别有用心的变量命名和糟糕的可读性而臭名昭著,但由于受Microsoft青睐,颇具影响。安装了Microsoft Visual Studio后可以看到源码。

(7)RW STL:Rough Wave Software, Inc.,非open source,曾经被C++Builder使用,据说被STLport取代。

2、在Microsoft Visual Studio 2005(VS2005)中使用STLport

安装VS2005即拥有PJ STL,再下载Safe STL、SGI STL、STLport,手上就有了4个实现版本。我打算让后两者运行起来。至于Safe STL,看看源码算了。

step 1. 准备文件

首先把STLport解压到一个目录,例如D:\STLport(下面记为%STLport%),该目录下应该有bin、build、doc、etc、lib等文件夹,还有一个INSTALL文件。

step 2. 为VS2005注册环境变量

在VS2005的安装目录(例如D:\Microsoft Visual Studio 8,记为%VS2005%)的common 7\tools下有一个vsvars32.bat,执行它就可以为VS2005注册环境变量。不幸的是,本人双击该文件时无效(原因不明),打开它,内容如下:

@SET VSINSTALLDIR=D:\Program Files\Microsoft Visual Studio 8
@SET VCINSTALLDIR
=D:\Program Files\Microsoft Visual Studio 8\VC
@SET FrameworkDir
=C:\WINDOWS\Microsoft.NET\Framework
@SET FrameworkVersion
=v2.0.50727
@SET FrameworkSDKDir
=D:\Program Files\Microsoft Visual Studio 8\SDK\v2.0
……(以下省略)

没办法,只好一个一个手动添加,在此诅咒狭小的Windows“环境变量”窗口。执行完这一步,cmd中应该可以执行nmake命令了。

step 3. 配置STLport

在cmd窗口进入%STLport%/build/lib目录,运行命令:

configure -c msvc8 --rtl-static

执行后,STLport将被配置为在VS2005(msvc8)下使用的静态库。(键入configure --help会看到更多的选项。)

step 4. make STLport

接着上一步运行

nmake /f msvc.mak INSTALL

该命令会把STLport的源码按configure命令指定的方式编译、连接,并把结果分放到相应的目录中。

step 5. 设置VS2005

打开VS2005,菜单中选择“工具(T)” - “选项(O)...”,在弹出窗口的左侧选择“项目解决方案” - “C++目录”,在右上方“显示以下内容的目录(S)”中选择“包含文件”,新建一项%STLport%\stlport,然后在“显示以下内容的目录(S)”中选择“库文件”,新建一项%STLport%\lib。注意两点:(1)把%STLport%替换为实际的位置;(2)把新建的项上移到列表的头部,因为当在程序中#include时,VS2005会在列表中依次寻找相应的文件。

打开项目的“属性”,在“配置属性”-“C/C++”-“代码生成”中将运行时库改成“多线程(/MT)”或“多线程调试(/MTd)”。

step 6. 测试是否成功

随便写一个程序包含STL头文件,例如#include <list>,然后选中<list>在右键菜单中选择“打开文档”。如果打开的是%STLport%\stlport\list,那么congratulations;而如果打开的是%VS2005%\VC\include\list,那就回头检查一下哪一步出了问题。。。

note. 重新用回PJ STL只需要把step 5新建的两项移到相应列表的末端。

3、在Windows下使用SGI STL

GCC使用的就是SGI STL,因此只要在Windows下搞来一个GCC即可。

plan A: Cygwin

下载一个Cygwin,安装,记得要把Devel那一项从default改成install。Cygwin安装的过程很漫长,几十k/s的速度花费了我好几个小时。安装完成后,可以在\cygwin\lib\gcc\i686-pc-cygwin\3.4.4\include\c++下找到STL的头文件。

如果仅有Cygwin,写程序的过程就相对原始一些,必须在Cygwin bash shell里以命令的方式解决编译、连接、运行这一套事务。高手们或许觉得vim很方便,但我还没习惯,所以我情愿用文本编辑器写好一个nut.cpp,再g++ nut.cpp -o nut,然后再./ nut。

带CDT插件的Eclipse能和Cygwin组成一个不错的IDE——理论上如此,据说如此,并且我也相信如此,但傍晚我按网上的教程试了1个小时,没成功。-_-||我决定忘掉这件事,等有空再搞。因为毕竟我要的是GCC,而不是一个酷酷的IDE。

plan B: Dev-C++

Dev-C++是一个使用GCC/g++做编译器的C++ IDE,遵循GNU GPL,可以从sourceforge上下载。安装完成后可以在\Dev-Cpp\include\c++\3.4.2目录下找到STL的头文件。由于某些不难理解的缘故,Dev-C++的STL版本可能要比Cygwin中的或者直接下载来的旧一些。但好处是方便,毕竟人家是IDE。试着写个程序跑一跑,基本搞定。

4、Conclusion

现在,我的机器上有一个VS2005,有一个Dev-C++4.9.9.2/g++3.4.2,有一个Eclipse Ganymede/CDT,还有一个Cygwin/g++3.4.4。本指望后两者能整合在一起的,遭遇了暂时性的挫败。好消息是,我有了可以运行的PJ STL、STLport和SGI STL,还有一个可以看的Safe STL。

Not bad。