博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

VC6 STLport编译,安装及注意事项

Posted on 2009-04-29 13:33  月光林地  阅读(2221)  评论(0编辑  收藏  举报

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 <vector>
 #include 
<deque>
 
 
using namespace std;
 
int main()
 {
  
const int arraysize = 7;
  
int ia[arraysize] = {0123456};
  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:

 

while (it != myHashMap.end()) {
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.