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中需要用到的工具和方法,等。

  1. 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这个目录下找到。
  2. 张羿的“.NET / Rotor 源码研究1 - Building Rotor”,链接地址为:

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

  1. 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

  1. Xwang的在Visual Studio 2008的环境下Build SSCLI 2.0(ROTOR),URL:

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

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

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

 

 

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

 

首先,如果是需要再AMD的系列CPU上面Build,最好参考codekaizen提供的源码修改包。其正对AMD的cpu再上面的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.

其中如果是再intel的cpu上面,按照他说的comment了TrlUnwind,会出现:

 

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\win32的exception.c第73行对

/*

WINBASEAPI

VOID

WINAPI

RtlUnwind(PVOID TargetFrame,

        PVOID TargetIp,

        PVOID ExceptionRecord,

        PVOID ReturnValue);

*/

的注释,去掉即可。

 

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

修改sscli源码让其在VS2008下面运行的第一步,就是要修改MSVCDIR和MSDEVDIR两个环境变量。在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的时候遇到的问题与解决方法。

 

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

运行env debug和buildall,

十分钟之后,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

 

 

参考:

http://www.cnblogs.com/lbq1221119/category/117125.html

转载于:https://www.cnblogs.com/hellolong/articles/5821109.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值