体验:VC++ .NET 2003 –安装和使用STLport 4.5.3 和LokiPort

原创 2003年05月02日 09:20:00

 体验:VC++ .NET 2003 –安装和使用STLport 4.5.3 LokiPort 


 

小气的神

2003-05-01

 

Article Type: In-Depth 

难度等级:7/9       

版本:1.52

 

 “I want Visual C++ to be the C++ implementation of choice”      -Stanley Lippman

 

最近也就是两天前Windows Server 2003发布伴随着也发布了微软最新的开发工具Visual Studio.NET 2003,(其中的一些新特性之前在我的《Visual Studio.NET 2003新特性》中已经都说明了这里就不浪费篇幅了)你会发现整个Visual Studio.NET 2003中的Visual C++.NET的改善或是说新特性特别的突出,被认为宣传上最重要的四大亮点:

1.        Enhanced ISO C++ Conformance

2.        New Pentium IV, Athlon Optimizations

3.        Improved Code Security

4.        New Windows Forms

 

除了提供性能和安全性的加强之外,对于14则是让我感兴趣的,针对ISO C++ StandardVisual C++.NET的问题,目前微软出示的数据显示其兼容和符合标准的程度达到了98%

“The ISO C++ language standard defines several advanced features that have been conspicuously absent from previous versions of Visual C++.  Visual C++ .NET 2003 now implements roughly 98% of the standard-defined language features, a statistic that is on par with or better than the majority of commercial C++ compilers, on any platform.  In comparison, Visual C++ 6.0 implements roughly 81% of the ISO C++ standard; Visual C++ .NET 2002 implements 87% of the ISO C++ standard.”

 

确切的消息指出最早这个数据出自三个Test Suite中的Perennial,另外两家分别是Plumb Hall Dinkumware。并且Microsoft Visual C++.NET的产品经理Nick Hodapp也拿出具体的清单得出98%出自C++ ISO Standard的这些部分(更具体的信息见Chris Maunder的访谈录):

l          2.2 Unicode identifiers 

l          3.4.2 Full Koenig lookup 

l          8.5.1 Empty aggregate initialization 

l          9.8 Symbol lookup for local member functions 

l          11.4 Friends in class templates (also 14.5.3) 

l          13.3.1.1.2 Implicit invocation of ptr-to-func conversions 

l          13.3.3.2 Ranking of derived to base conversions 

l          14 Export keyword

l          14.1 Non-type template parameters (also 14.3.2)

l          14.5.2 User-defined conversion templates

l          14.5.4 Partial specialization of class templates

l          14.5.5.2 Partial ordering of function templates

l          14.6 Dependent name lookup

l          14.7.1 Nested classes in class templates

l          14.7.3 Explicit specialization of member templates

l          15.4 Exception specifications

l          15.5.2 The unexpected() function

 

We're not at 100%, yet, but expect that we'll remain on the path towards full conformance.  In particular, the ISO features "Export" and "Exception Specifications" are tricky, and there is much debate as to their usefulness.

 

对于14.6 微软承诺在下一个版本会实现.C++社团非常感兴趣的信息可能是Compile and use popular C++ community-written libraries including LOKI, BLITZ, and BOOST”冲着这句话和98%的高度兼容指标,抱着测试和验证的想法,我编译和测试了一些”C++ community-written libraries”。其一,验证一下是否真是如其言;其二,我也发现网络上抱有类似想法的人还不少,而进行的过程各不相同,所以是一种不错的体验或经历;其三,我发现这方面的中文资料太少,所以整理一份记录和相关资源与大家分享吧。于是也就有了这两篇文章,第一篇是关于STLport 4.5.3Loki,第二篇是关于Boost 1.30Blitz++ Library的体验.

 

    首先是Loki Library,这个类库就不用介绍太多,刚好最近Andrei Alexandrescu的《Modern C++ Design》一书中文版――C++设计新思维出版,有更多人会对它有更多更深的了解。对于这套类库其实不存在实现编译和安装的问题,一般是将需要的模块或功能通过Include到你的项目中,然后进行调用-编译-运行。总来说,Alexandrescu不是基于Visual C++来编写这个类库的,所以如果你真的直接用Visual C++ .NET来编译的话,可能也够你受的,我偷了懒,在网上我就找到了这方面的资源。并且Visual Studio.NET 2002我测试通过过,所以2003的版本我测过也没问题,剩下来就是资源的问题,找到合适的资源我想你就可以在办好你需要做的事情J

Original download:

http://moderncppdesign.com

http://sourceforge.net/projects/loki-lib/

VC6 +SP5 download:

http://fara.cs.uni-potsdam.de/~kaufmann/?page=lokiport

http://fara.cs.uni-potsdam.de/~kaufmann/?page=lokiexamples

VC7.0 + download:

http://www.geocities.com/rani_sharoni/LokiPort.zip

http://www.geocities.com/rani_sharoni/LokiPort.html

当然你也可以到我的网站上获得 Loki Library for VC++ 6.0 Loki Library for VC++ 7.0

你下载LokiPort_VC7.zip,将其解压到一个目录比如Visual Studio.NET 2003的安装目录下,然后就可以测试一下了,非常好的是这里面已经提供了每个模式的测试程序,你只用到tests目录中进行编译-运行就可以测试其编译器的情况了。

比如: cl /GX /MT /EHsc Test_XXXXX.cpp 然后运行-OK

 

 

当然有些比较特殊一点,我猜你会编译Test_SmartPtr.cpp第一次会出错,只要你按照Zip文档中的Readme上做就没有问题,换成下面的指令:

cl /GX /MT /GR /EHsc Test_SmartPtr.cpp ../SmallObj.cpp

 

CL.exe你有两点需要注意:

1.     保证你运行了 X:/Program Files/Microsoft Visual Studio .NET 2003/Vc7/bin/vsvars32.bat D:/Program Files/Microsoft Visual Studio .NET 2003/Common7/Tools/vsvars32.bat

2.      注意你的环境变量中INCLUDELokiPort的路径比如

@set INCLUDE=%MSVCDir%/LokiPort70;%MSVCDir%/ATLMFC/INCLUDE; …

C:> SET INCLUDE=C:/LokiPort70;%INCLUDE”

更简单的是使用Visual Studio.NET 安装程序组中的Visual Studio.NET 2003 Command Prompt

 

 

不过我建议你先备份你的vsvars32.bat然后直接修改这个文件,在加入Loki LibraryInclude的路径。

上述例子中我的Loki library在下面的路径:

D:/Program Files/Microsoft Visual Studio .NET 2003/Vc7/LokiPort70/tests>

 

啊哈,太简单了吧,当然Loki这样是可以过关了,如果都这么简单,我也就不用写这篇文章了,后面还有更多有趣的故事,接下来该 STLport了。

 

有关STLPort是什么,又怎么样,如何如何我就不用再多说J,我们直接入正题,装好用好才是关键

我使用的是STLport 4.5.3 安装目录:C:/STLport-4.5.3

Visual C++安装在D:/Program Files/Microsoft Visual Studio .NET 2003/Vc7/bin

 

你可以从这里进行Download http://www.stlport.com/download.html

Visual C++ 6.0的你可以在这篇文章中找到大部分资源和步骤,但对于在VC6中最新的4.5.3要编译通过还需要一个补丁见下面的”Bug fix for VC 6”

Using STLport with Microsoft Visual C++ 6

http://www.softadvances.com/articles/stlportusing.html

作者一个好的忠告J “Dinkumware's VC6 STL is $90; the others are free. While SGI's library works with VC6, it has problems with <iostream>. I haven't tried Dinkumware or Boost.” 不过这个建议对于Visual Studio.NET的用户来说似乎并不适用.

 

我则用了上面文章类似的步骤测试:

Download下来STLport-4.5.3.zip(1.2M) 解压缩之后,第一反应是需要设置你的INCLUDEPATH,在这两者中指明你的STLport Library的路径(见上面)

 

众所周知,Visual Studio.NET中带的STL库是P.J. Plauger写的一套STL类库(也是C++ STL一书的作者也是上面我们提到的Dinkumware公司的创始人之一),对于STLPort主要是强调多平台和多编译器,所以Visual C++.NET不是原生的就可以编译和支持,这个问题在Visual Studio.NET 2002(VC7.0)中就发现了,但就我看到的VC7.1中问题似乎更加严重了。

 

STLPort-4.5.3/src 中有你可以看到令你振奋的vc7.mak如果你直接执行nmake –f vc7.mak install,你会非常非常的沮丧,因为不会直接编译通过的。

通过不断地测试和阅读大量的讨论组,我发现总结,需要进行下面的修改:

1.       stlport/config/stl_msvc.h

注释定义:#define _STLP_NO_TYPENAME_ON_RETURN_TYPE 1进行注释 //#define _STLP_NO_TYPENAME_ON_RETURN_TYPE 1

修改所有类似 _STLP_MSVC <= 1300_STLP_MSVC <= 1310

1310VC7.1的版本号原来的文件都是针对VC++ 7.0

2.    stlport/stl/_ios.h

移动代码块

# if defined (_STLP_USE_TEMPLATE_EXPORT)
_STLP_EXPORT_TEMPLATE_CLASS basic_ios<char, char_traits<char> >;
# if ! defined (_STLP_NO_WCHAR_T)
_STLP_EXPORT_TEMPLATE_CLASS basic_ios<wchar_t, char_traits<wchar_t> >;
# endif
# endif /* _STLP_USE_TEMPLATE_EXPORT */

到语句之后

# endif /* _STLP_NO_METHOD_SPECIALIZATION */

但保证在_STLP_END_NAMESPACE这句之前

3.    stlport/stl _deque.c , stlport/stl/_hashtable.c, stlport/stl/_string.c, stlport/stl/_tree.c

这部分修改比较多,基本上将这些文件中的

 __iterator__     -> typename __iterator__

 __sizet_type__   -> typename __size_type

 __reference__ -> typename __reference__

这部分挺多了,具体的你可以参考这个文档:stlport4.5.3-vs.net-2003.diff

http://www.zenadsl5874.zen.co.uk/temp/dcplusplus/stlport4.5.3-vs.net-2003.diff

      

       任何人对会对修改这些感到厌烦,我将其修改的相关文件都已收集到我的网站。你Download下来,先备份你的原始文件,然后将覆盖相同的文件即可。

Downlaod: STLPort 4.5.3 patch for VC7.1 , STLPort 4.5.3 patch for VC 6+SP5

4.      在做了之上的调整之后,你可以开始进行编译。键入:

nmake –f vc7.mak instll

copy vc7.mak Makefiel

namek vc7.mak clean all

5.      不多时编译就会完成,你会发现类型下面的编译结果

 

 

然后可以开始测试一下我们编译的结果,看看STLport是否能够正确的使用。

设置

SET INCLUDE=%MSVCDir%/ /STLport-4.5.3/stlport;%MSVCDir%/ATLMFC/INCLUDE;…

Copy 编译的lib , dll %MSVCDir%/LIB;

否则设置:

SET LIB=%MSVCDir%/ STLport-4.5.3/lib;%MSVCDir%/ATLMFC/LIB;….

我选择的是STLport带的测试程序

cd /test/eh

namek –f vc6.mak

结果如下图

 

 

不用太过于紧张,一看需要修改这么多J大部分的修改是调整一些声明和语法,不同平台和编译器之间的切换造成的,更重要的一点是STLPort并不原生支持VC编译器,讨论组中有人埋怨,希望下一版本的STLport 5.0VC编译器支持能够的更好,我猜这改变不是立即就发生,不过VC++是我非常喜欢的一款编译器,6.0的时候如此,7.1的时候还是一样。

 

如果你在我的文章中没有编译通过或找到你想要的,那么这个论坛你要注意:

http://www.stlport.com/cgi-bin/forum/dcboard.cgi

还有下面的几个帖子:

“STLPORT-5.0-0409 and VC7.0 (.NET2002)”

http://www.stlport.com/dcforum/DCForumID7/1406.html

"Building on VC++ .NET 2003"

http://www.stlport.com/dcforum/DCForumID6/1288.html

“Problems with VC7.1"

http://www.stlport.com/dcforum/DCForumID6/1278.html

"STLPort does not compile with Koenig lookup"

http://www.stlport.com/dcforum/DCForumID6/1277.html

"Bug fix for VC 6"

http://www.stlport.com/dcforum/DCForumID6/1193.html

".NET 2003 "

http://www.stlport.com/dcforum/DCForumID7/1408.html

"getting error in _string.h during compilation"

http://www.stlport.com/dcforum/DCForumID6/1232.html

 

但愿这一部分我的描述足够清楚,也但愿这些文字对于你做同样的事情时会有帮助。整个Visual Studio.NET的家族中Visual C++.NET会变成一个相对非常特殊的产品和代表,成为唯一一个可以穿越ManagedUnmanaged环境的工具和介质,所以即使在.NET大行其道的未来,Visual C++.NET凭借着这一点,依然会光彩夺目,荣膺不坠。

 

对于是继续讲下去,还是放到下一篇文章再讲有些犹豫,先休息一下,给我一点时间,安排下面的BoostBlitz++的内容和编排。

 


 

特别:

本文使用的Visual Studio.NET Version 7.1.2292, .NET Framework 1.1.4322Visual Studio.NET Final Bate的版本还不是最终的版本,其结果不知是否和正式版本下有不同。

cl.exe- Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13.10.2292 for 80x86

 

本文原创,CSDN署名首发,所有文字和图片版权所有。未经授权请勿传播、转载或改编。

如果有问题或建议,请发电子邮件给new2001@msn.com

欢迎访问我的WebLogwww.dotNETTools.org/weblog/weblog.html

 

VS2010下安装和使用STLport库

1.去官网http://www.stlport.org/下载最新的STLport,我下载了STLport-5.2.1.tar.bz2,它是纯净的源码,需要用户自己编译。 2.VS2010编译步骤:(解...
  • libaineu2004
  • libaineu2004
  • 2014年03月07日 16:12
  • 2287

教你如何在WINDOWS Server2003上部署一个Asp.Net的网站

对于许多新手来说,如何在服务器上部署网站并不了解,这个教程希望对新手有帮助。 1、IIS服务器 2、.Net Framework3.5 (方便起见,我们这里Framework说的都是指的这个版本) 这...
  • proglovercn
  • proglovercn
  • 2015年04月02日 00:18
  • 6923

解决mvc4.5项目部署到win2003服务器上

最近帮客户写了个简单的后台管理系统,使用的是vs2013+access2007版搭建的framework 4.5.1版本的项目。等到本机一切运行正常后,要发布到客户的服务器上,却发现一只启动不了,查看...
  • eadio
  • eadio
  • 2016年04月08日 15:23
  • 2463

windows server 2003配置asp.net4.0网站找不到该页等问题解决方案

1、在IIS6下新建一个网站就用那个80端口了。 2、记住IIS默认的ASP.NET是2.0的,所以在“属性”——“ASP.NET”下选择4.0. 3、在web服务扩展里,允许以下几项: ...
  • xinma
  • xinma
  • 2014年04月26日 23:27
  • 1342

VC++ .NET 动态加载DLL,使用反射方式Invoke委托调用

每次新产品都需要配一个上位机,并且本地配置与远程配置都需要重新开放配置程序,因此就想办法把配置模块变为一个动态的控件,一次开发后续2个程序都可以同时使用,使用了很多种方法,最后还是使用反射方式. ...
  • cp1300
  • cp1300
  • 2015年10月09日 21:50
  • 1130

如何将vs2012开发的基于.net framework 4.5框架的MVC4项目部署到windows server2003服务器上

最近使用vs2012开发的一个项目,准备g
  • sweetburden2011
  • sweetburden2011
  • 2014年10月09日 17:51
  • 19066

Dell R720 安装操作系统之一(windows 2003)

正常引导盘安装符合要求的操作系统,估计都会玩,只针对两种情况做以总结,方便他人,也方便自己日后查找: 1.Dell R720为第12代服务器,不支持过于旧的版本2003。 2.U盘安装windows ...
  • nanfeiyannan
  • nanfeiyannan
  • 2013年12月12日 15:19
  • 6634

Rational rose 2003安装—问题解决

这段时间一直在进行UML的学习,UML的重点就是九种图和四种关系,UML在一款软件的开发过程中的作用不言而喻,关于如何绘制UML的九种图,UML视频中提到了RationalRose 这个工具,先不管工...
  • u010955843
  • u010955843
  • 2014年02月21日 11:59
  • 1012

Windows2003操作系统SQL Server 2008安装图解(详细)

最近不少用户在windows2003 server 32位操作系统上安装SQL Server2008总是失败,出现大量错误。今天经过通过我反复测试安装,找出了一个便捷的安装方法,节省大家宝贵时间,具体...
  • ccrong
  • ccrong
  • 2015年07月24日 10:31
  • 2762

windows2003搭建SVN服务器

一、安装必备的软件 需要的软件清单:  【1】   httpd-2.2.22-win32-x86-openssl-0.9.8t.msi  【2】  Setup-Subversion-1.7.4....
  • u013408061
  • u013408061
  • 2015年03月06日 12:06
  • 920
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:体验:VC++ .NET 2003 –安装和使用STLport 4.5.3 和LokiPort
举报原因:
原因补充:

(最多只允许输入30个字)