Build SSCLI20 under VS2008 full Document (完全手册)

以前build过几次sscli2都成功了,这次换了个新的环境,没想到出了一大堆的问题。折腾了半天,最终搞定,把解决问题的过程和方法都记录下来。

 

首先说说build的过程中参考过的链接和资源。

1.         首先就是sscli自带的文档:Building the Shared Source CLI 2.0 and C# 2.0 Source Tree

/sscli20/docs/buildtools/building_sscli.html),这里详细介绍了build的过程,build中需要用到的工具和方法,等。

2.         Shared Source CLI 2.0 Build Environment Variable Scripts(env.bat, env.csh, env.sh)sscli20/docs/buildtools/env.html),详细介绍了设置环境变量和buildall等工具的参数设置。Build中用到的其它工具的参考说明可以到sscli20/docs/buildtools这个目录下找到。

3.         张羿的“.NET / Rotor 源码研究1 - Building Rotor”,链接地址为:

http://blog.csdn.net/ATField/archive/2006/12/31/1471465.aspx

4.         Jeremy Kuhne's “SSCLI 2.0 and Visual Studio 2008”,URL:

http://blogs.msdn.com/jeremykuhne/archive/2008/02/19/sscli-2-0-and-visual-studio-2008.aspx

5.         XwangVisual Studio 2008的环境下Build SSCLI 2.0(ROTOR),URL:

http://www.cnblogs.com/zhzkl/archive/2008/05/13/1194258.html

6.         Building SSCLI20 (Rotor) in VS2008,URL:

http://code.msdn.microsoft.com/BuildRotorInVS2008,by codekaizen

 

 

还有就是发现问题和解决问题的过程了.

 

首先,如果是需要再AMD的系列CPU上面Build,最好参考codekaizen提供的源码修改包。其正对AMDcpu再上面的4上面做了一些小的修改:

l  In the modified win.env.bat file, I added @set PROCESSOR_ARCHITECTURE=x86 to line 106 to get it to build under AMD64. The build environment was X86 already, but apparently it wasn't enough.

l  On line 144 of the modified tools/nmake/def.mak file, comment out #CFLAGS = $(CFLAGS) -Wp64, since the flag is deprecated.

l  This one didn't seem right, but it was the most expedient: comment out lines 73 to 79 in pal/exception.c, which is the declaration of a function RtlUnwind which is apparently never used or defined. It could be some platform specific call, which works on a Windows machine.

其中如果是再intelcpu上面,按照他说的commentTrlUnwind,会出现:

 

d:/rotor/sscli20/pal/win32/exception.c(143) : error C2094: label 'RtlUnwind' was undefined

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

 

         这样的错误,这个时候,把他再pal/win32exception.c73行对

/*

WINBASEAPI

VOID

WINAPI

RtlUnwind(PVOID TargetFrame,

        PVOID TargetIp,

        PVOID ExceptionRecord,

        PVOID ReturnValue);

*/

的注释,去掉即可。

 

另外说说VC开发环境变量设置的问题。

修改sscli源码让其在VS2008下面运行的第一步,就是要修改MSVCDIRMSDEVDIR两个环境变量。在sscli20/docs/buildtools/env.html这个地方,可以看到MSVCDir的定义,指向的是:%VCINSTALLDIR%/VC,指向的是Microsoft Visual C++ 2005 root directory

如果不修改msvcdir变量,在env debug的时候,就会报出msvcdir没有设置的错误。

修改/sscli20/win.env.bat

 

1.         change %VS80COMNTOOLS% on line 37 to %VS90COMNTOOLS%

2.         after line 42, insert the following:

REM Set the SDK path

if "%ROTOR_WINSDKDIR%"=="" set ROTOR_WINSDKDIR=%WindowsSdkDir%

if "%ROTOR_WINSDKDIR%"=="" set ROTOR_WINSDKDIR=%MSVCDIR%/PlatformSDK

call :ShortName "%ROTOR_WINSDKDIR%"

set ROTOR_WINSDKDIR=%RESULT%

 

想这样因为环境变量引起的问题还挺多,可以参考Jeremy Kuhne的文章一一修改。另外,也可以看看上面的几个链接中他们在build的时候遇到的问题与解决方法。

 

Xwangblog上面把他的那个包给下载下来,然后直接覆盖到sscli,如果你出现code编码的保存方式不同造成的错误,请参考zhangyi的文章修改OSlocation。如果你出现不能正确识别操作系统的错误,也请参考zhangyi的那篇文章。如果你出现一些环境变量的莫名其妙的问题,请参考xwang的解决方法。

运行env debugbuildall

十分钟之后,build完成好了,就可以运行:

 

D:/Rotor/sscli20>cd binaries.x86dbg.rotor

 

D:/Rotor/sscli20/binaries.x86dbg.rotor>csc ../samples/hello/hello.cs

Microsoft (R) Shared Source CLI C# Compiler version 2.0.0001

for Microsoft (R) Shared Source CLI version 2.0.0

Copyright (C) Microsoft Corporation. All rights reserved.

 

D:/Rotor/sscli20/binaries.x86dbg.rotor>clix hellp.exe

hellp.exe: The system cannot find the file specified.

 

D:/Rotor/sscli20/binaries.x86dbg.rotor>clix hello.exe

Hello World!

 

Enjoy Rotor, Enjoy Code, and Enjoy research! Have fun!

 

Lbq1221119@cnblogs, first post at http://sscli.cnblogs.com

11/11/2008 9:42 PM

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
源码简介:Microsoft 发布了 sscli 2.0,所谓的 sscli 就是 Shared Source CLI。基本上是 .NET Framework 2.0 的 Microsoft 实现,当然是实际发布的 .NET Framework 2.0 的一个简化版本。 sscli 2.0 中包含很多有趣的东西,包括: 01、vm - 包含了 CLI 核心实现,包括垃圾收集器、类装入器、类型系统、错误报告系统、应用程序域、配件、代理支持、反射、安全性和代码管理器。 02、csharp - 包含了使用 C++ 编写的 C# 编译器(csc.exe)和配件连接器。 03、classlibnative - 包含了公共类型和国际化例程。 04、ipcman - 包含跨进程通讯系统的源代码。 05、managedlibraries - 包含Remoting 和 SoapSerializer 的源代码。 06、utilcode - 包含被运行时、工具和 C# 编译器使用的核心例程,例如路径处理和分析、数组和散列表管理、C 运行库、字符大小写支持、库和配件载入、调试和日志支持、同步机制,还包括字符串格式化、GUID创建、错误处理、注册表以及配置访问等。 07、md - 包含元数据的读取器和编写器。 08、fjit - 包含 sscli JIT 编译器和验证器。 09、fusion - 包含配件绑定、策略检查和全局配件缓存的实现代码。 10、bcl - 包含 ECMA 基础类库的 C# 代码,包括大部分 System 名字空间下的代码。 11、debug - 包含运行时调试器的源代码。 12、ilasm - 包含 CIL 汇编器的源代码。 13、ildasm - 包含 CIL 反汇编器的源代码。 14、tools - 包含 PEVerify、clix.exe、metainfo.exe、托管调试器符号的读写器以及其它工具的源代码。 15、toolbox - 包含 caspol、strike 等其它工具的源代码。 16、dlls - 包含在构建过程中所需要的本机共享库。 17、xmlparser - 包含 XML 分析器的源代码。 18、fx - 包含主要名字空间中类的实现,包括正则表达式、XML和网络等。 19、jscript - 包含了使用 C# 编写的 JScript 编译器。 20、pal - 包含了平台适配层(PAL)的实现,包括 unix 和 win32 两个平台。 21、palrt - 包含 PAL 运行时的实现。 22、samples - 示例。 23、tests - 大量的测试用例和套件。
http://blog.csdn.net/atfield/article/details/1471465 Introduction Shared Source CLI 2.0 (开发代号Rotor) 是微软.NET Framework 2.0的Shared Source实现版本。Shared Source是微软推出的源代码共享计划,可以在一定限制的情况下获得/使用源代码,详情可以参考Microsoft Shared Source Initiative主页:http://www.microsoft.com/resources/sharedsource/。Rotor的代码可以在非商业行为的前提下可以自由修改和发布,只需保留License声明即可。Rotor包含了下面的内容: 1. CLI的运行时(CLR)的符合ECMA标准的实现 2. C# & Jscript编译器 3. .NET Framework中的部分工具,如ilasm, ildasm, cordbg, gacutil, sn等 4. Build工具,如Build, Binplace, NMake等 5. PAL (Platform Adaptation Layer),支持其他平台 6. 自动化回归测试 7. Samples 由此可见,Rotor是研究.NET Framework实现的最佳材料。 Rotor的全部源代码可以在微软的MSDN网站上下载:http://msdn.microsoft.com/net/sscli/ 下载后解压缩,可以看到如下的目录结构: 目录 内容 Binaries.x86*.rotor Build出来的可执行文件和Symbols。这个目录在Build之后才会出现 clr CLI和BCL(Base Class Library)的实现 csharp C#编译器的实现就在这里了 Docs 文档 Env Build时所需的一些文件 Fx 类库的实现 Jscript Jscript编译器的实现 Pal Platform Adaptation Layer的实现。PAL是Rotor对Windows和Unix的一些基本API的封装 Palrt Platform Adaptive Layer Runtime的实现。PAL中的和操作系统平台无关可重用的部分 prebuilt 存放着build所需的一些事先用工具生成好的文件 Samples Samples Tests Regression Test Suite Tools Build工具,包括binplace, build, cppmunge等 Vscommon 公共头文件,主要是微软内部使用的一些产品有关的公用的宏定义 总共大概有150MB左右。 本人先发在CSDN上做个备份。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值