本文共 2365 字,大约阅读时间需要 7 分钟。
/文
转载注明出处stlport是对C++标准模板库的一个实现,遵循INTERNATIONAL STANDARD ISO/IEC 14882:1998(E) 和最新的ISO/IEC 14882:2003(E)标准。它的一个好处,就是提供了跨平台和跨编译器的实现。另外它还有一个易于使用的“安全模式”可以检测容器和迭代器的不正确用法。对于通用的功能也进行了优化。它的源代码比微软的实现也易于阅读。
但是stlport没有提供vc6和vc8的编译项目文件,而是提供了相应的各编译器的make file。这给windows下编译增加了一定困难。必须在命令行下用nmake来进行编译,以生成相应的lib文件。编译过程可以参考doc/README.msvc这个文件。这里以vc6编译为例。
首先,用命令行进到stlport的解压目录的build/lib目录,执行:
执行完毕,会提示用nmake /fmsvc.mak来编译。执行:
E:/cvs/vod/thirdparty/STLport-5.1.4/build/lib>nmake /fmsvc.mak Microsoft (R) Program Maintenance Utility Version 7.00.8882 Copyright (C) Microsoft Corp 1988-2000. All rights reserved.cl /nologo /W4 /GX /GR /Zm800 /MD /Zi /O2 /DWIN32 /D_WINDOWS /DNDEBUG /I../../stlport /c /Foobj/vc6/shared/dll_main.o /Fdobj/vc6/shared/stlport.5.1.pdb ../../src/dll_main.cppdll_main.cppD:/Program Files/Microsoft Platform SDK for Windows Server 2003 R2/Include/./winbase.h(1576) : error C2733: second C linkage of overloaded function 'InterlockedIncrement' not allowed D:/Program Files/Microsoft Platform SDK for Windows Server 2003 R2/Include/./winbase.h(1574) : see declaration of 'InterlockedIncrement'D:/Program Files/Microsoft Platform SDK for Windows Server 2003 R2/Include/./winbase.h(1583) : error C2733: second C linkage of overloaded function 'InterlockedDecrement' not allowed D:/Program Files/Microsoft Platform SDK for Windows Server 2003 R2/Include/./winbase.h(1581) : see declaration of 'InterlockedDecrement'D:/Program Files/Microsoft Platform SDK for Windows Server 2003 R2/Include/./winbase.h(1591) : error C2733: second C linkage of overloaded function 'InterlockedExchange' not allowed D:/Program Files/Microsoft Platform SDK for Windows Server 2003 R2/Include/./winbase.h(1588) : see declaration of 'InterlockedExchange'NMAKE : fatal error U1077: 'cl' : return code '0x2'Stop. |
这是因为安装了plaform SDK引起的错误。这需要修改源码了。找到stlport/stl/config/user_config.h,打开,找到
#define _STLP_NEW_PLATFORM_SDK 1,将其注释去掉。修改后如下:
再执行nmake /fmsvc.mak,就会通过了。
接着执行nmake /fmsvc.mak install,会将相应的lib文件拷贝到bin目录。如果找不到nmake,则需要安装环境变量。找到VC6安装目录,用命令行进入其VC98/Bin,执行vcvars32.bat,即可得到相应环境变量。