VC6 STLport-5.1.4 编译,安装
先将Microsoft Visual Studio\VC98\Bin的目录添加到PATH环境变量中
1. 开启命令行窗口,建立VC环境, 执行 %MSVCDir%\VC98\Bin\VCVARS32.BAT
2. 切换到 %STLport-5.1.4%\build\lib,执行 configure msvc6 --with-static-rtl , 进行编译配置。其中:
msvc6是VC6平台,--with-static-rtl,静态链接[重要]。
-clean 完成后清除 build configuration files
更多选项参数使用命令 configure --help 查看
3. 执行 nmake /fmsvc.mak 或者 nmake /fmsvc.mak install,后者在编译完成后拷贝生成的library至%STLport-5.1.4%\lib目录下。建议使用 install 参数。
4. 打开VC6,在Tools->Options->Directories中,添加include files路径:%STLport-5.1.4%\stlport,添加library files路径:%STLport-5.1.4%\lib,调整这两个添加的路径至第一路径位置。
5. 修改工程选项:Project->Settings...->C/C++中,Category选择Code Generation,然后在use run-time library中选择Debug Multithreaded。(如果是release版本,选择Multithreaded;如果想用动态链接,则要先编译动态链接版本的STLport,再在这儿选择相应的DLL)
**********************************************************************************************
VC6 STLport-4.6.2 编译,安装【%STLport-4.6.2% 表示 其路径,比如 C:\STLPORT 等】
1. /*****
a.修改....\VC98\Bin中的VCVARS32.BAT文件,找到
set INCLUDE=%MSVCDir%\ATL\INCLUDE;%MSVCDir%\INCLUDE;%MSVCDir%\MFC\INCLUDE;%INCLUDE%
set LIB=%MSVCDir%\LIB;%MSVCDir%\MFC\LIB;%LIB%
这两句,加上STLPort的路径,修改成如下:
set INCLUDE=%STLport-4.6.2%\stlport;%MSVCDir%\ATL\INCLUDE;%MSVCDir%\INCLUDE;%MSVCDir%\MFC\INCLUDE;%INCLUDE%
set LIB=%STLport-4.6.2%\lib;%MSVCDir%\LIB;%MSVCDir%\MFC\LIB;%LIB%
(C:\STLport\lib目前还不存在,但不用着急,编译完stlport就有了)
****/
2. 开启命令行窗口,建立VC环境, 执行 %Microsoft Visual Studio%\VC98\Bin\VCVARS32.BAT
3. nmake -f vc6.mak clean all (vc6还可以选择支持unicode的vc6-unicode.mak文件)
4. 配置VC:
点击vc的tools-options-Directories,
选择Include files,加入%STLport-4.6.2%\STLPORT,并调到最前面
选择Library files,加入%STLport-4.6.2%\LIB,并调到最前面
安装并设置完成后,测试编译以下代码,若没报错则表示安装成功
#include <deque>
using namespace std;
int main()
{
const int arraysize = 7;
int ia[arraysize] = {0, 1, 2, 3, 4, 5, 6};
vector<int> v(ia, ia+arraysize);
//v.push_back(0);
deque<int> d(ia, ia+arraysize);
return 0;
}
使用STLPORTs时一些需要注意的地方:
********************************************
如果和PlatformSDK 一起使用的话
要记的在STLport目录中 \stlport\stl_user_config.h 文件中
把这一句打开
# define _STLP_NEW_PLATFORM_SDK 1
否则在编译时会有如下错误
second C linkage of overloaded function ‘InterlockedIncrement’ not allowed
********************************************
如果想静态链接 STLPort 请在VC6的 C/C++ \ General \ Preprocessor definitions
中添加宏 _STLP_USE_STATIC_LIB
********************************************
对於使用IOSTREAM的, 如果有问题
在STLport目录中 \stlport\stl_user_config.h 文件中
把这一句打开吧
# define _STLP_NO_IOSTREAMS 1
********************************************
- When you erase an element from a hash_map only iterators to the erased element are invalidated
so you can write something like:
if (condition)
myHashMap.erase(it++); //这里为何这样不出错 而把it++放外面就不行呢
//在外面是对删除后的无效指针加, 而里面是对有效指针加
else
++it;
}
To finish STLport has a special debug mode to check such bad construction. Check the
stl_user_config.h file in the stlport folder for that, the macro is _STLP_DEBUG.