Chinaunix首页 | 论坛 | 博客
  • 博客访问: 158919
  • 博文数量: 56
  • 博客积分: 2510
  • 博客等级: 少校
  • 技术积分: 502
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-18 14:21
文章分类

全部博文(56)

文章存档

2010年(39)

2009年(17)

我的朋友

分类: C/C++

2010-01-07 12:17:49

     STL是一个标准,各商家根据这个标准开发了各自的STL版本。而在这形形色色的STL版本中,SGI STL无疑是最引人瞩目的一个。这当然是因为这个STL产品系出名门,其设计和编写者名单中,Alexander Stepanov和Matt Austern赫然在内,有两位大师坐镇,其代码水平自然有了最高的保证。SGI STL不但在效率上一直名列前茅,而且完全依照ISO C++之规范设计,使用者尽可放心。此外,SGI STL做到了thread-safe, 还体贴地为用户增设数种组件,如hash, hash_map,hash_multimap, slist和rope容器等等。因此无论在学习或实用中,SGI STL应是首选。SGI STL本质上是为了配合SGI自作的UNIX变体IRIX所量身定做,其它平台上的C++编译器想使用SGI STL,都需要一番周折。着名的GNU C++虽然也使用 SGI STL,但在发行前已经过调试整合。普通的用户,特别是Windows平台上的BCB/VC用户要想使自己的C++编译器与SGI STL共同工作,可不是一件容易的事情。好在英雄总能及时出现,俄国人Boris Fomitchev注意到这个问题之後,建立了一个free的项目,称为STLport,旨在将SGI STL的基本代码移植到各种主流编译环境中,使各种编译器的用户都能够享受到SGI STL带来的先进之处。STLport 发展过程中,曾受到Matt Austern的亲切指导,发展到今天,已经比较成熟。最新的STLport,可以从免费下载,zip文件体积约1.2M, 可以支持向各种主流C++编译环境的移植VC当然算是主流的编译环境,自然得到STLport的关照。但据笔者实践来看,配置过程中还有一些障碍需要跨 越,下面是Visual C++ 6.0 环境中配置STLport的过程。
    首先从
中下载STLport的ZIP文件,文件名stlport.zip. 然後利用WinZip等工具展开。生成stlport目录,该目录中有且仅有一个子目录,名称亦为stlport,不妨将整目录拷贝到你以为合适的位置.
    Microsoft Visual C++ 6.0是当今Windows下C++编译器主流中的主流,但是对於ISO C++的支持并不尽如人意。其所配送的STL性能也比较差。不过既然是主流,STLport自然不敢怠慢,下面介绍VC中的STLport配置方法。
    以下描述中,假定你使用的Windows装在C:\Windows目录。VC装在 C:\Program Files\Microsoft Visual Studio\VC98;而STLport原包置于C:\STL4VC。
C:\STL4VC中应该有以下内容:
         <目录> doc
         <目录> lib
         <目录> src
         <目录> stlport
         <目录> test
          文件 ChangLog
          文件 Install
          文件 Readme
          文件 Todo
同时确保 C:\Program Files\Microsoft Visual Studio\VC98\bin在你的Path环境变量中。下面一步步来:
     a. 本次配置任务均在DOS命令状态下完成,请先从“开始”-->“附件”菜单中选中MS-DOS方式,打开一个DOS窗口。
     b. 到C:\Program Files\Microsoft Visual Studio\VC98中,利用你顺手的文本编辑器修改两个文件vcvars32.bat,其中有两行
             set INCLUDE=%MSVCDir%\ATL\INCLUDE;%MSVCDir%\INCLUDE;%MSVCDir%\MFC\INCLUDE;%  INCLUDE%
             set LIB=%MSVCDir%\LIB;%MSVCDir%\MFC\LIB;%LIB%
改 成:
             set INCLUDE=C:\STL4VC\stlport;%MSVCDir%\ATL\INCLUDE;%MSVCDir%\INCLUDE;\
%MSVCDir%\MFC\INCLUDE;%INCLUDE%
            set LIB=C:\STL4VC\lib;%MSVCDir%\LIB;%MSVCDir%\MFC\LIB;%LIB%
上面为了方面阅读 用 "\" 符号将过长的一行折成两行,实际文件中还是一行。修改完毕後保存,然後执行命令vcvars32。一切顺利的话应该给出一行结果:
     Setting environment for using Microsoft Visual C++ tools.
     如果你预设的DOS环境空间不足,这个BAT文件执行中可能导致环境空间overflow,此时应该在DOS窗口的“属性”对话框中找到“内存”页,修改 “初始环境”ComboBox,改为一个较大的值,如1280或2048。然後再次开一个DOS窗口,运行vcvars32.bat。
     c. 进入到C:\STL4VC\SRC目录中。
     d. 执行命令copy vc6.mak Makefile
     e. 执行命令make clean all漫长等待。屏幕反反复复地显示似乎是同样的内容,请务必保持耐心,这实际上是在以不同编译开关建立不同性质的目标库。
     f. 经过一段漫长的编译之後, 终於结束了。现在你再执行命令
                 make install
这次需要的 时间不那麽长,但也要有点耐心。
     g. OK,大功告成。下面一步应该是检验一下事不是真的用上了SGI STL。跟上面BCB的过程差不多,找一个使用了SGI STL特性的程序,比如使用rope, slist, hash_set, hash_map等容器的程序来编译。注意,编译时务必使用下面的格式:cl /GX /MT program.cpp
     SGI STL中大量使用try..throw..catch,VC缺省情况下不支持此语法,/GX是要求VC++ Compiler打开对异常处理语法的支持。/MT则是要求VC的linker本程序obj文件与libcmt.lib连接在一起,因为SGI STL是thread-safe的,必须以multi-thread形式运行。
    若要在图形界面中使用SGI STL,可在VC中调整Project-->Setting(Alt+F7), 设置编译选项,注意使用/MT和/GX,并且引入选项/Ic:\stl4vc\stlport及/libpath:c:\stl4vc\lib。
    全部完成後,C:\STL4VC这个目录的体积也由原来的区区4.4M膨胀到可怕的333M,当然这其中有300M是编译过程中产生的.obj文件,如果 你确信自己的STLport工作正常的话,可以删掉它们,省出硬盘空间。不过这样一来,下次若再编译,就只好再等很长时间。
阅读(873) | 评论(0) | 转发(0) |
0

上一篇:正则表达式源码

下一篇:RMVB格式简单解析

给主人留下些什么吧!~~