중국어 간 체 XP 에서 SSCLI 2.0 을 구축 하 는 주의 점

하나의 제품 이 end user 에 게 줄 때 사용자 체험 을 중시 해 야 하고 소스 코드 가 프로그래머 에 게 줄 때 도 사용자 체험 을 중시 해 야 합 니 다. T.
정말 out - of - the - box exprience 의 소스 코드 를 할 수 있 습 니 다. 정말 적 습 니 다.하지만 그래 야 고 수 를 만 들 수 있 을 까?그 전에 VS 2008 로 boost 를 컴 파일 하려 고 했 는데이틀 동안 Rotor 를 써 야 하 는 것 도 자기 컴퓨터 에 설 치 된 시스템 이 영문 버 전의 Windows XP 와 Visual Studio 2005 였 으 면 좋 겠 다 는 생각 이 들 었 다.
T T
전에 제 르 미 쿤 이 얘 기 했 어 요.
4. 567915. 그러나 간 체 중국어 Windows XP 에서 그 가 한 수정 만 으로 는 충분 하지 않다.
우선, Jeremy 는 한 가지 빠 뜨 린 것 같 습 니 다. 그 가 \ sscli 20 \ win. env. bat 에 추가 한 이 말:
if "%ROTOR_WINSDKDIR%"=="" set ROTOR_WINSDKDIR=%WindowsSdkDir%

시스템 이 이 환경 변 수 를 설정 하지 않 았 을 때 역할 을 하지 못 합 니 다.그러나 VC9 에 PlatformSDK 디 렉 터 리 가 없 으 면 이 설정 은 실패 합 니 다.
따라서 환경 변수 에 WindowSdkDir 를 설정 합 니 다. 값 은 C: \ Program Files \ \ Microsoft SDK \ \ Windows \ v 6.0A 입 니 다.
(또는 기계 에 있 는 윈도 SDK 의 실제 설치 위치, 예 를 들 어 윈도 SDK 6.1 을 설치 하면 경로 가 다 를 수 있 습 니 다)
그리고 \ sscli 20 \ win. env. bat 에서 이상 한 문 제 를 만 났 습 니 다. 이 줄 에서:
set /A ROTOR_TOOLSET_VERSION=%ROTOR_TOOLSET_VERSION%/10-60

조작 수 를 찾 을 수 없다 고 잘못 보고 할 수 있다.이해 가 안 돼.그래서 아예 toolset detection 전 체 를 REM 으로 떨 어 뜨리 고 바로 한 마디 로 바 꾸 었 습 니 다.
set ROTOR_TOOLSET_VERSION=90

OTL。
다음은 \ sscli 20 \ env. core. pl 에서 이 줄:
if (! ($platform_os_version =~ s/
Microsoft.*\[Version +([0-9]+\.[0-9]+)\..*\]/$1/g)) {

나 쁜 것 은 중국어 간 체 XP 가 ver 명령 을 입력 할 때 이런 결 과 를 얻 었 다 는 것 이다.
Microsoft Windows XP [   5.1.2600]

"Version" 이 없 으 면 이 정규 표현 식 은 일치 하지 않 습 니 다.
해결 방법 은 "Version" 을 "버 전" 으로 바 꾸 는 것 입 니 다.
if (! ($platform_os_version =~ s/
Microsoft.*\[ +([0-9]+\.[0-9]+)\..*\]/$1/g)) {

============================================================================
\sscli20\clr\vm\thread.cpp
이 파일 에는 0x 80 이 넘 는 문자 가 여러 개 있 는 것 같다.너무 이상 하 잖 아 요. 이거... 혹시 UTF - 8 거 예요?하지만 UTF - 8 의 BOM 은 없다.어쨌든 나 는 error 에서 이것 을 보 았 다.
인용 하 다.
vm\threads.cpp : error C4819: The file contains a character that cannot be represented in the current code page (936). Save the file in Unicode format to prevent data loss
같은 문제 도 발생 했 습 니 다.
인용 하 다.
vm\win32threadpool.cpp(2582) : error C4819: The file contains a character that cannot be represented in the current code page (936). Save the file in Unicode format to prevent data loss
정말 참 을 수 없습니다. 코드 에 ASCII 문자 가 있 는 지 확인 하기 위해 간단 한 C \ # 프로그램 을 썼 습 니 다.
cp.cs:
using System;
using System.IO;

sealed class CP {
    static void Main( string[ ] args ) {
        int lineno = 1;
        using ( FileStream fs = File.OpenRead( args[0] ) ) {
            while ( fs.CanRead ) {
                int b = fs.ReadByte();
                if ( b < 0 ) break;
                else if ( b == 0x0A ) ++lineno;
                else if ( b > 0x080 ) {
                    Console.WriteLine( "Line {0}: 0x{1:X}", lineno, b );
                }
            }
        }
    }
}

그리고 Perl 이나 Ruby 스 크 립 트 를 써 서 출력 결 과 를 보면 파일 에 문제 가 있 는 지 없 는 지 알 수 있 습 니 다.이 두 파일 을 고 친 후에 야 build 가 끝 났 습 니 다. 중간 에 cannot find header file 같은 오류 가 있 지만.
===========================================================================
마침, 위 에 있 는 cp. cs 를 가지 고 방금 빌 드 된 SSCLI 2.0 의 csc 와 clix 를 테스트 해 보 세 요.
인용 하 다.
H:\sscli20>csc cp.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.
H:\sscli20>clix cp env.core.pl
Line 552: 0xB0
Line 552: 0xE6
Line 552: 0xB1
Line 552: 0xBE
Line 553: 0xB0
Line 553: 0xE6
Line 553: 0xB1
Line 553: 0xBE
env. core. pl 두 줄 은 제 가 Version 을 '버 전' 으로 바 꾸 고 주석 을 추가 한 곳 입 니 다.Good, 당분간 은 정상적으로 작 동 하 는 것 같 습 니 다.
이제 hack 를 시작 할 수 있 습 니 다. 제 가 수정 해 야 할 부분 코드 입 니 다.
===========================================================================
그리고 여기
4. 567915. 관련 build 문제 도 있 습 니 다.근 데 그 사람 이 만난 문 제 는 안 만 났 어 요. 그냥 링크 참고 용 으로 남 겨 두 세 요.
업데이트:
블 로그 가든 에서 링크 게시 물 을 본 김 에 적어 두 었 다.
어떻게 Visual Studio 2008 에 대응 하여 SSCLI 2.0 코드 를 조정 합 니까?

좋은 웹페이지 즐겨찾기