VC环境下配置编译STLport-5.2.1

时间:2022-09-07 22:13:20

最近在看《STL源码剖析》,在VC6和VC2005中搭建了相关环境,以下是我参考的文章

根据自己在安装过程中的经验,在VC6中确实有文章中所提及的“bug”,所以后面就改用VC2005来使用STLport5.2.1。结果在编译过程中出现未预计到的编译错误:size_t在std中未定义。搞了半天都无法正常编译。最后采用了文中VS2008的方法:Visual Studio 2005 Command Prompt运行同样的命令,这样才能通过编译,VS2008经测试编译也没有问题。建议各位想学着用STLport的同好,还是用VS2005或VS2008来配置使用STLport吧。

本文转载自http://blog.csdn.net/whutxinriyue/archive/2010/06/03/5646065.aspx

VC6.0VS2005VS2008安装STLport-5.2.1

 

  今天为了装STLport,搞了很久,主要是新版本以致搞VC6.0时,有很多要注意的。

 

前文:  下载STLport源代码,解压到一个目录,例如:F:\Program Files\STLport-5.2.1。下面我都用 %STLport%表示解压的完全路径。根据解压的不同,各位用自己的目录替换这里的 %STLport% 就是(有点罗嗦了)。

 

 

 

(一)、VC6.0安装STLport-5.2.1

(注意:下面的步骤都在一个cmd里操作,很简单的原因:环境变量啊)

  1首先在\Microsoft Visual Studio\VC98\Bin\VCVARS32.BAT中, %STLport%\stlport;,(注意有英文的分号)  加入Include路径中;把%STLport%\lib;,加入Lib路径中;(这里现在%STLport%下没有lib子目录,先加上去,一会编译会生成的)下面是的我:

 

set INCLUDE=F:\Program Files\STLport-5.2.1\stlport;%MSVCDir%\ATL\INCLUDE;%MSVCDir%\INCLUDE;%MSVCDir%\MFC\INCLUDE;%INCLUDE%

set LIB=F:\Program Files\STLport-5.2.1\lib;%MSVCDir%\LIB;%MSVCDir%\MFC\LIB;%LIB%

 

  2打开cmd,运行刚才的这个VCVARS32.BAT;进入%STLport%运行configure --help,看一下;运行configure msvc6,正确的话,会有:

STLport Configuration Tool for Windows

 

Setting compiler: Microsoft Visual C++ 6.0

 

Setting platform: Windows XP

 

Done configuring STLport.

 

Go to build/lib folder and type "nmake clean install" to build  and

install STLport to the "lib" and "bin" folders.

Go to build/test/unit folder and type nmake clean install to

build unit tests and install them in bin folder.

 

注意:这里不要按网上很多人说的运行:configure  -c  msvc6,会有问题的,我就是被困在这儿很长时间的;这个应该是老一点的版本的方式。还有就是这个configure也不是在%STLport%\build\lib下进行的,网上都这样讲,但是%STLport%\build\lib下没有configure啊!

 

 3接下来先进入%STLport%\build\lib;执行nmake  /fmsvc.mak,这个要等一段时间;之后,执行nmake  /fmsvc.mak  install,是一些copy动作。

 

4主要是上面的步骤,后面的就是配置VC6.0了:

  ATools ->  Options  ->  Directories,选“Include files”,增加%STLport%\stlport,并移至顶端;不移至顶端,还是会用原来VC自带的STL

选“Library files”,增加%STLport%\lib,并移至顶端;

 

BProject ->  Settings  -> C/C++Category中选“C++ Language”

勾选”Enable exception handling”(这个最好选一下)Category中选”Code Generation”Use run-time library中选”Debug Mulithreaded”(这个Release版选” Mulithreaded”);

 

基本可以了,给个简单例子,试试:(VC自带的STL没有slist只有安装成功了,才能编译成功)

 

#include <slist>

#include <iostream>

using namespace std;

 

int main(void)

{

slist<int> sl;

 

sl.push_front(11);

sl.push_front(23);

sl.push_front(39);

 

//打印单向链表元素

slist<int>::iterator i,iend;

iend=sl.end();

for(i=sl.begin(); i!=iend; i++)

cout << *i << ' ';

 

cout << endl;

return 0;

}

   C、上面可以编译成功,当然你可以运程序;但是,问题来了,你在上面任意地方加一个“空格”(或是变动一下程序)重新编译,死活都不行了,这是编译器给的提示,你的提示应该差不多:

--------------------Configuration: main - Win32 Debug--------------------

Compiling...

main.cpp

f:\program files\stlport-5.2.1\stlport\stl\_num_put.c(494) : fatal error C1001: INTERNAL COMPILER ERROR

        (compiler file 'msc1.cpp', line 1794)

         Please choose the Technical Support command on the Visual C++

         Help menu, or open the Technical Support help file for more information

Command line warning D4028 : minimal rebuild failure, reverting to normal build

Error executing cl.exe.

Creating browse info file...

BSCMAKE: warning BK4503 : minor error in .SBR file '.\Debug\main.sbr' ignored

BSCMAKE: warning BK4503 : minor error in .SBR file '.\Debug\main.sbr' ignored

 

main.exe - 1 error(s), 3 warning(s)

  这个是VC6.0问题,用20052008都不会出现这个问题,造成这种问题的原因是编译器分配的内存超过了限制。

解决办法是:Project ->  Settings  -> C/C++Category中选”Precompiled Headers”,选择“Not using precompiled headers”OK了,有人说这种办法会减慢编译速度,这个自然了,不过比起问题来,还是值得的。(各位大虾不要说我卖弄哦,我只是希望能帮助到更多人!)

本人配置时也出现相似的错误

 d:\stlport-5.2.1\stlport\stl\_num_put.c(494) : fatal error C1001: INTERNAL COMPILER ERROR
        (compiler file 'msc1.cpp', line 1786)
         Please choose the Technical Support command on the Visual C++
         Help menu, or open the Technical Support help file for more information
Command line warning D4028 : minimal rebuild failure, reverting to normal build

建议不要使用VC6来配置STLport

 

(二)VS2005安装STLport-5.2.1

1添加路径到vcvarsall.bat,就可以了,要添加includelib在…Microsoft Visual Studio 8\VC\bin下有一个vcvar32.ba;其实是指向…Microsoft Visual Studio 8\Common7\Tools\vsvars32.bat的,所以直接改它就可以了;

   主要是在“@set INCLUDE=”后面加上%STLport%\stlport;,(注意有英文的分号)  加入Include路径中;在@set LIB=后面加上%STLport%\lib;(这里现在%STLport%下没有lib子目录,先加上去,一会编译会生成的)。


后面的和上面VC6.0安装差不多,写简单一点:

 2进入%STLport%configure --help 可以看到相关的编译器的设置:configure msvc8

【注意,3处要从Visual Studio 2005 Command Prompt进入命令行输入命令才能编译通过】

3进入%STLport%\build\lib执行nmake  /fmsvc.mak

4接下来:nmake  /fmsvc.mak  install

5、接下来把上面%STLport%\stlport%STLport%\lib添加到vs2005vc目录路径,而且放在最上面

6可以编译成功上面的那个例子了,但是,运行的话:会说“丢失 stlported5.2.dll”;所以,还需要把%STLport%\bin里面的所有文件都复制到vcbin文件夹目录下; (VC6.0中不需要此步)

 

三)、VS2008安装stlport-5.2.1的过程(参照VS2005安装)

1、解压到C:\STLport-5.2.1

2、添加路径后,打开vs2008cmdprompt,进入C:\STLport-5.2.1\STLport-5.2.1

3configure msvc9

4、进入C:\STLport-5.2.1\STLport-5.2.1\build\lib

5nmake -clean  6nmake install