分享
 
 
 

配置STL

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

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 F

omitchev注意到这个问题之後,建立了一个free的项目,称为STLport,旨在将SGI STL的

基本代码移植到各种主流编译环境中,使各种编译器的用户都能够享受到SGI STL带来的先

进之处。STLport 发展过程中,曾受到Matt Austern的亲切指导,发展到今天,已经比较

成熟。最新的STLport 4.0,可以从www.stlport.org免费下载,zip文件体积约1.2M, 可以

支持向各种主流C++编译环境的移植。BCB及VC当然算是主流的编译环境,自然得到STLpor

t的关照。但据笔者实践来看,配置过程中还有一些障碍需要跨越,本文即旨在详细指导读

者在Borland C++Builder 5.5及Visual C++ 6.0 环境中配置STLport。

首先请从www.stlport.org中下载STLport 4.0的ZIP文件,文件名stlport-4.0.zip. 然後

利用WinZip等工具展开。生成stlport-4.0目录,该目录中有且仅有一个子目录,名称亦为

stlport-4.0,不妨将整目录拷贝到你以为合适的位置,然後改一个合适的名字,例如配合

BCB的,可以叫STL4BC,等等。

下面分成BCB/VC两种情形来描述具体过程。

Borland C++Builder 5

Borland C++Builder5中所带之C++编译器是5.5版本,在当前较主流的Windows平台编译器

中,对於ISO C++ Standard的支持是最完善的。用它来配合SGI STL相当方便,也是笔者推

荐之选。没有此开发工具的读者,可以到www.borland.com上免费下载Borland C++ 5.5编

译器的一个精装版,该精装版体积为8.54M,名称 freecommandlinetools1.exe,乃一自解

压安装文件。可在Windows中执行它,

安装到合适的目录中。展开後体积50M。

以下描述中,假定你使用的Windows装在C:\Windows目录。如果你有BCB5,我假设装在C:Program Files\Borland\CBuilder5;如果你没有BCB5,而是使用上述的精简版BCC,则假

设安装在C:\BCC55目录中,而STLport原包置于C:\STL4BC。

C:\STL4BC中应该有以下内容:

<目录> doc

<目录> lib

<目录> src

<目录> stlport

<目录> test

文件 ChangLog

文件 Install

文件 Readme

文件 Todo

同时确保C:\Program Files\Borland\CBuilder5\Bin或C:\BCC55\Bin在你的Path环境变量

中。

笔者推荐你在安装之前读一读Install文件,其中会讲到如何避免使用SGI提供的iostream

库。如果你不愿意使用SGI iostream,STLport会在原来编译器自带的iostream库外加一个

wrapper,使之能与SGI STL共同合作。不过SGI提供的iostream库标准化程度好,跟本家

的 STL代码配合起来速度也快些,所以笔者实在想不出什麽理由不使用它,在这里假定大

家跟笔者一样,乐于使用SGI iostream库。有不同看法者尽可以按照Install文件的说法调

整。

下面一步步来:

0. 本次配置任务均在DOS命令状态下完成,请先从“开始”-->“附件”菜单中选中MS-DO

S方式,打开一个DOS窗口。

1. 到C:\Program Files\Borland\CBuilder5\bin中,利用你顺手的文本编辑器修改两个文

件:

file1: bcc32.cfg,改成:

-I"C:\STL4BC\stlport";"C:\Program Files\Borland\CBuilder5\Include";"C:\Program Files\Borland\CBuilder5\Include\vcl"

-L"C:\STL4BC\LIB";"C:\Program Files\Borland\CBuilder5\Lib";"C:\Program Files\Borland\CBuilder5\Lib\obj";"C:\Program Files\Borland\CBuilder5\Lib\release"

上面为了方便阅读用"\"符号将很长的一行折行,实际文件应该只有两行。

file2: ilink32.cfg,改成:

-L"C:\STL4BC\LIB";"C:\Program Files\Borland\CBuilder5\Lib";"C:\Program Files\Borland\CBuilder5\Lib\obj";"C:\Program Files\Borland\CBuilder5\Lib\release"

在C:\BCC55\BIN目录中,不存在这两个文件,请你自己用文字编辑器手工做出这两个文件

来,内容与上面有所不同,如下

file1: bcc32.cfg,内容:

-I"C:\STL4BC\stlport";"C:\BCC55\Include";

-L"C:\STL4BC\LIB";"C:\BCC55\Lib";

file2: ilink32.cfg,内容:

-L"C:\STL4BC\LIB";"C:\BCC55\Lib";

2. 进入到C:\STL4BC\SRC目录中。

3. 执行命令copy bcb5.mak Makefile

4. 执行命令make clean all

这个命令会执行很长时间,尤其在老旧机器上,可能运行30分钟以上。屏幕不断地在显示

工作情况,有时你会看到好像计算机在反复地做同样几件事,请保持耐心,这实际上是在

以不同编译开关建立不同性质的目标库。

5. 经过一段漫长的编译之後, 终於结束了。现在你再执行命令 make install 这次需要

的时间不长。

6. 来到C:\STL4BC\LIB目录,执行

copy *.dll c:\windows\system;

7. OK,大功告成。下面一步应该是检验一下事不是真的用上了SGI STL。rope是SGI STL提

供的一个特有容器,专门用来对付超大规模字符串(string是细弦,而rope是粗绳子,可以

想见rope的能力有多强)。

下面这个程序有点暴殓天物,不过也可以做一个小试验了:

//issgistl.cpp

#include <iostream>

#include <rope>

using namespace std;

int main()

{

// crope就是容纳char类型字符的rope容器

crope bigstr1("It took me about one hour ");

crope bigstr2("to plug the STLport into Borland C++!");

crope story = bigstr1 + bigstr2;

cout << story << endl;

return 0;

}

//~issgistl.cpp

编译 bcc32 issgistl.cpp

咦,怪哉,linker报告说找不到stlport_bcc_static.lib,到C:\STL4BC\LIB看个究竟,确

实并没有这个文件,倒是有一个stlport_bcb55_static.lib。笔者发现这是STLport的一个

小问题,需要将库文件的名字做一点改动:

copy stlport_bcb55_static.lib stlport_bcc_static.lib

这做法比较稳妥,原来的stlport_bcb55_static.lib也保留下来。以其他选项进行编译时

,还可能会遇到类似的问题,只要照葫芦画瓢该名字就没问题了。

现在再编译,应该没问题了。可能有一些warning,没有关系。只要能运行,就说明rope容

器起作用了,也就是说你的SGI STL开始工作了。

Microsoft Visual C++ 6.0:

Microsoft Visual C++ 6.0是当今Windows下C++编译器主流中的主流,但是对於ISO C++的

支持并不尽如人意。其所配送的STL性能也比较差。不过既然是主流,STLport自然不敢怠

慢,下面介绍VC中的STLport配置方法。

以下描述中,假定你使用的Windows装在C:\Windows目录。VC装在 C:\Program Files\Mic

rosoft 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环境变量中。

下面一步步来:

0. 本次配置任务均在DOS命令状态下完成,请先从“开始”-->“附件”菜单中选中MS-DO

S方式,打开一个DOS窗口。

1. 到C:\Program Files\Microsoft Visual Studio\VC98中,利用你顺手的文本编辑器修

改两个文件vcvars32.bat,其中有两行

set INCLUDE=%MSVCDir%\ATL\INCLUDE;%MSVCDir%\INCLUDE;%MSVCDir%\MFC\INCLUDE;%INC

LUDE%

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。

2. 进入到C:\STL4VC\SRC目录中。

3. 执行命令copy vc6.mak Makefile

4. 执行命令make clean all

如果说BCB编译STLport的时间很长,那麽VC编译STLport的过程就更加漫长。屏幕反反复复

地显示似乎是同样的内容,请务必保持耐心,这实际上是在以不同编译开关建立不同性质

的目标库。

5. 经过一段漫长的编译之後, 终於结束了。现在你再执行命令

make install

这次需要的时间不那麽长,但也要有点耐心。

6. 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++ Co

mpiler打开对异常处理语法的支持。/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。

整个过程在笔者的老式Pentium 150机器上运行了超过3小时,读者的机器想必快得多,但

也必然会花去出乎你意料的时间。全部完成後,C:\STL4VC这个目录的体积也由原来的区区

4.4M膨胀到可怕的333M,当然这其中有300M是编译过程中产生的.obj文件,如果你确信自

己的STLport工作正常的话,可以删掉它们,省出硬盘空间。不过这样一来,下次若再编译

,就只好再等很长时间。

另外,据笔者勘察,STLport 4.0所使用的SGI STL并非最新问世的SGI STL3.3版本,不知

道把SGI STL3.3的代码导入STLport会有何效果,有兴趣的读者不妨一试。

大致情形就是这样,现在,套用STLport自带文件的结束语:

Have fun!

孟岩

2001-3-11

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有