在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文件
将代码修改为:
#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.在新建的工程中键入代码,就可以进行源码调试了。
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中的常用算法
- STL区间成员函数及区间算法总结
- c++ STL容器总结之:vertor与list的应用
- C++在成员函数中使用STL的find_if函数实例
- 关于STL中list容器的一些总结
- 关于STL中的map容器的一些总结
- 浅析stl序列容器(map和set)的仿函数排序
- STL list链表的用法详细解析
- stl容器set,map,vector之erase用法与返回值详细解析
- STl中的排序算法详细解析
- 关于STL中vector容器的一些总结
- 关于STL中set容器的一些总结
- 简单说说STL的内存管理
- CppUtest发现的STL容器内存泄漏问题
- STL中算法
- STL简单应用
- vector-list-deque
- 三十分钟掌握STL
- 1.sort()
- 刚刚接触到一个STL的函数make_pair()