STLPort的编译和安装 - 王猛 (HeartIcy@163.com)
前言
STLPort是一套C++模板库,BCB6集成的正是此库的早期版本。虽然STLPort并没有100%完整支援
ANSI标准的规定,但是从宝蓝肯采用此模版库作为标准配备可见其自有独到一面!现在我谈一下
我编译以及使用此开发库的感受。不过我要说明的是,我是一个C程序设计专家而不是C++,我的
体会或者说心得仅仅是如何在项目中使用并将其应用到项目中。
编译
环境配置
STLPort支持多平台下的常用编译器,可是说是包罗万象!在Windows下编译STLPort你要先注意三
点:1 修改vc98/bin下的vcvars32.bat ;2 不要试图使用 Platform SDK ;3 准备好调试符号!
为什么?请听我慢慢道来。
关于第一点,你需要根据你的平台修改,vcvars32.bat从命令行下进行编译。当然,你可以参照
makefile文档自己制作工程文件在IDE中编译,不过STLPort本身没这个文件!
包含路径在 set INCLUDE = 中追加STLPort目录下的stlport目录,例如:
set INCLUDE=F:\STLport\stlport;%MSVCDir%\ATL\INCLUDE;%MSVCDir%\INCLUDE;%MSVCDir%\
MFC\INCLUDE;%INCLUDE%
包含库路径在 set LIB= 中追加STLPort目录下的lib目录,例如:
set LIB=F:\STLport\lib;%MSVCDir%\LIB;%MSVCDir%\MFC\LIB;%LIB%
好了,第一点完成了!
关于第二点,大家注意到了我并没有包含进Platform SDK的更新过来,事实上我的机器中安装有此更
新的2003年2月版(支持Win2003新特性!)。我坚持不包含进来的原因是,在Platform SDK中更新过的部分文件编译STLPort时无法正常工作。也不奇怪,微软这会儿正忙着猛推.NET来着!切忌不要用!
关于第三点,如果没有调试符号文件在编译DEBUG版本的时候会给你一个Link错误提示 :( 不过,即
使没有再执行一边nmake仍然可以输出文件,不过这样出来的文件能不能正常工作我就不知道了!
当你完成了上述三步之后,你日后可以继续用这个环境在命令行下编译你的STLPort程序。
makefile文件
在STLPort的src目录下存放了众多.mak文件,这些文件就是STLPort为其多平台多编译器支持所准备
的杰作。我们使用VC来编译可以根据编译器的版本选择不同的.mak文件:
VC.Net使用vc7.mak,VC5使用vc5.mak(STLPort官方测试支援),VC6的选择就相对多了一点,有三
个文件可以选择,用NT系列的选择vc6t.mak,用98之类的选择vc6.mak,需要获得unicode支援的就用
vc6-unicode.mak,vc6-unicode.mak是针对98编写的,虽然NT可以直接套用但是我自己还是小小的修
改了一下:将!INCLUDE vc_common.mak 替换为!INCLUDE vc_commont.mak。其实你如果你懂得规则完
全可以根据自己的需要编写一个.mak前端文件出来,STLPort为了方便自行编写makefile文件的开发人
员提供了一个名为build-tempinc-xlc.mk的模版文件。
用命令行在src目录下,执行copy 你选择的.mak makefile, 偷懒的在这个时候 nmake install就可
以连编译到安装一次解决!不过,还是多学点东西好,我继续讲我的。如果你在link它的DEBUG编译时
出现了link错误,不要灰心你可以再执行一边刚才的命令(强烈不推荐!)或者自定义编译。
** 这一步你不copy直接 nmake -f xxx.mak 一样可以。
自定义编译
比如我讨厌Debug版,所以我就直接编译release。方法很简单,如果要编译一个静态库可以用:
nmake release_static
要编译一个动态库则用
nmake release_dynamic
注意了,自定义编译没有现成的install来用,要自己改makefile,太麻烦了。
安装
如果你是自定义编译那么必须看一下这里。
1 STLPort所产生的动态库DLL复制到system32(NT)或者system(98),目录下。
2 将stlport子目录复制到vc的include目录下。
3 将.lib .exp文件复制到vc的lib目录下。
如果你不打算删除stlport的源代码目录第2、3步是可选的,因为vcvars32.bat已经做了定位。否则你
最好还是顺便修改一下vcvars32.bat。
项目中的应用
1 无论怎样stlport必须处于INCLUDE目录的第一位。
2 动态库编译link stlport_vc6.lib 静态link stlport_vc6_static.lib。
3 如果使用动态库记得copystlport_????.dll到发布的程序中,否则,嘿嘿!你知道的!
完毕?