vc6下编译安装stlport:
下载stlport的源码,将其解压到任意文件夹下,记下这个文件路径
(我的为D:\sdk\STLport-5.2.1\)
1.配置编译器环境变量
在\Miscrosoft Visual Studio\VC98\BIN\下找到文件
VCVAR32.BAT,该文件是注册环境变量的。
在其中把stlport的include和lib路径给配置上。
右键-》编辑
在文件结尾处有如下两行
set INCLUDE=%MSVCDir%\ATL\INCLUDE;%MSVCDir%\INCLUDE;%MSVCDir%\MFC\INCLUDE;%INCLUDE%
set LIB=%MSVCDir%\LIB;%MSVCDir%\MFC\LIB;%LIB%
将源码的include和lib添加到路径中,我的环境如下:
set INCLUDE=D:\sdk\STLport-5.2.1\stlport;%MSVCDir%\ATL\INCLUDE;%MSVCDir%\INCLUDE;%MSVCDir%\MFC\INCLUDE;%INCLUDE%
set LIB=D:\sdk\STLport-5.2.1\lib;%MSVCDir%\LIB;%MSVCDir%\MFC\LIB;%LIB%
保存。
2.配置执行环境
然后执行VCVARS32.bat,(可以直接双击执行,也可以在cmd中执行,如果系统为win7推荐以管理员身份运行)
打开cmd,路径切换到stlport的根目录,执行命令:
configure msvc6.
正确的话返回值为:
STLport Configuration Tool for Windows
Setting compiler: Microsoft Visual C++ 6.0
Setting platform: Windows XP
Done configuring STLport.
Go to build/lib folder and type "nmake clean install" to build and
install STLport to the "lib" and "bin" folders.
Go to build/test/unit folder and type nmake clean install to
build unit tests and install them in bin folder.
3.编译运行
cmd下路径切换到stlport的build\lib下,执行以下命令
nmake /fmsvc.mak
这条命令为编译,执行时间很长。
完成后运行以下指令
nmake /fmsvc.mak install
这条命令的主要功能是copy
4.配置VC
A.TOOL-》Options-》Directories中分别增加Include和lib,并将其移至顶端。
5.使用,
配置完lib和include后,新建工程测试,在运行时会弹出对话框“无法启动此程序,因为计算机中
丢失stlportd.5.2.dll。尝试重新安装该程序以解决此问题。
引起这个问题的原因是,默认使用了利用动态库的方式。下面介绍stlport的两种调用方法
a.动态库
源码根路径的bin目录,里面是刚才我们编译出来的dll库。
将其中的stlportd.3.2.dllcopy到C盘的system32目录下,
Project->settings->C/C++,
Category中选:
Code Generation : 在Use run-time library中选“Debug Mulithreaded DLL”(Release版选“Mulithreaded”)
如果当前程序支持MFC的话,还需要到
Project->settings->General,
Microsoft Foundation Class:中选择Use MFC in a Shared DLL 否则会在编译期间报一堆未识别符号
如:__argv,__argc等等
b.静态库
静态库方式不用把dllcopy到system32下。
Project->settings->C/C++,
Category中选:
Code Generation : 在Use run-time library中选“Debug Mulithreaded”(Release版选“Mulithreaded”)
如果当前程序支持MFC的话,还需要到
Project->settings->General,
Microsoft Foundation Class:中选择Use MFC in a Static Library 否则编译期会报错
#error : Please use the /MD switch for _AFXDLL builds
6.其他,
此外还有可能会遇到如下的问题:
error C2733: second C linkage of overloaded function 'InterlockedIncrement' not allowed
这种情况是stl跟PSDK的兼容性冲突了。不过stl已经有了处理措施
打开stl源码目录\stlport\stl\config\user_config.h
在其中搜_STLP_USE_MFC和_STLP_NEW_PLATFORM_SDK
发现这两个宏是注释状态,将其注释起开,问题解决。