您的位置:首页 > 其它

在VS2010上配置SGI_STL

2015-08-04 21:06 411 查看
    最近刚入手了侯捷的《STL源码剖析》,准备花时间好好研究一下。因此有必要在编译器上配置下STL的源码。以下为实践中遇到的各种问题及解决方法。

    1. 用VS2008新建一个控制台程序,解决方案的名字不重要,你可以随便起;我的工程名字叫SGI_STL,工程目录为SlnDir/SGI_STL。你先编译运行一下,如果没问题就下一步。注:以下所有SlnDir都要替换成你解决方案的目录名字。

  2. 下载SGI STL源代码 http://sourceforge.net/projects/stlport/ ;上面的名字是叫STLport,我使用的版本是 STLport-5.2.1。下载到本地然后解压到目录:SlnDir/SGI_STL/STLport-5.2.1/。

 3. 从启动程序里启动VS2010的命令行提示,用CD命令转到SlnDir/SGI_STL/STLport-5.2.1/目录下,输入:configure msvc9 正常的话出来下面的结果,但注意系统版本显示错误了,我的是win7但他显示了winxp,不管,反正能通过。

 4. 看到上面给出的提示了吗?没错,进入到build/lib目录下,输入nmake clean install,后面就等几分钟编译过程吧。

     假若出现如下错误:

D:\STLport\STLport-5.2.1\stlport\stl/_cstdlib.h(158) : error C2084: function
'__int64 abs(__int64)' already has a body

C:\Program Files\Microsoft Visual Studio 10.0\VC\INCLUDE\../include/stdlib.h(471) : see previous definition of
'abs'

NMAKE : fatal error U1077: '"C:\Program Files\Microsoft Visual Studio 10.0\VC\BIN\cl.EXE"' :
return code '0x2'

用vs2010打开D:\STLport\STLport-5.2.1目录下的_cstdlib.h文件

(可以搜索到),找到158行:


158 inline _STLP_LONG_LONG abs(_STLP_LONG_LONG __x) { return __x < 0 ? -__x : __x; }


将代码修改为:
#if !defined(_STLP_MSVC) || (_STLP_MSVC < 1600)

inline _STLP_LONG_LONG abs(_STLP_LONG_LONG __x) { return __x <
0 ? -__x : __x; }
#endif

这样保存并重新编译安装即可。

5. 编译完毕,进入到SlnDir/SGI_STL/STLport-5.2.1/bin目录下,应该有三个pdb文件和三个dll文件,把这六个文件复制到SlnDir/SGI_STL/Debug目录下面。

6.选择建立的工程,右键单击,选择属性,在配置属性中选择vc++目录。在可执行文件目录中加入SlnDir/SGI_STL\STLport-5.2.1\bin。在包含目录中加入SlnDir\SGI_STL\STLport-5.2.1\stlport。在库目录中加入SlnDir\SGI_STL\STLport-5.2.1\lib。

7.在新建的工程中键入代码,就可以进行源码调试了。

#include <iostream>
//#include "stdafx.h"
#include "E:\workspace\SGI_STL\STLport-5.2.1\stlport\vector"
using namespace std;
int main()
{
std::vector<int> v;
v.push_back(2);
v.push_back(4);
return 0;
}


 

 

 

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  STL 源码剖析