分享
 
 
 

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

王朝vc·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

体验: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

除了提供性能和安全性的加强之外,对于1,4则是让我感兴趣的,针对ISO C++ Standard和Visual 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.3和Loki,第二篇是关于Boost 1.30和Blitz++ 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.0Loki 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. 注意你的环境变量中INCLUDE有LokiPort的路径比如

@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 Library的Include的路径。

上述例子中我的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) 解压缩之后,第一反应是需要设置你的INCLUDE和PATH,在这两者中指明你的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

1310为VC7.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.0对VC编译器支持能够的更好,我猜这改变不是立即就发生,不过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会变成一个相对非常特殊的产品和代表,成为唯一一个可以穿越Managed和Unmanaged环境的工具和介质,所以即使在.NET大行其道的未来,Visual C++.NET凭借着这一点,依然会光彩夺目,荣膺不坠。

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

特别:

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

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

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

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

欢迎访问我的WebLog:www.dotNETTools.org/weblog/weblog.html

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有