2011년 1월 25일 화요일

C# Compiler platform option (x86, x64, Itanium)




 .NET 응용프로그램은 기본적으로 특정 OS 및 CPU Architecture (x86, x64, Itanium) 을 고려하지 않아도 된다. 하지만 Native code 로 작성된 모듈과 연동을 하다보니 OS 및 CPU Architecture 도 신경을 써주게 되었다. 




.NET 응용프로그램에서 C/C++ dll 을 로드하는 경우가 있었는데 이 dll이 x64 환경에서 WOW 환경에서만 올바르게 동작이 되었다. 결국 .NET 응용프로그램을 WOW로 실행시켜야 한다. 




.NET 응용프로그램 프로젝트의 플랫폼 옵션을 변경해 주면 된다. 





MSDN 내용을 발취하면,








  • x86을 사용하면 어셈블리가 32비트, x86 호환 CLR에서 실행되도록 컴파일됩니다.

  • Itanium을 사용하면 어셈블리가 Itanium 프로세서 탑재 컴퓨터의 64비트 CLR에서 실행되도록 컴파일됩니다.

  • x64를 사용하면 어셈블리가 AMD64 또는 EM64T 명령 집합을 지원하는 컴퓨터의 64비트 CLR에서 실행되도록 컴파일됩니다.

  • anycpu(기본값)를 사용하면 어셈블리가 모든 플랫폼에서 실행되도록 컴파일됩니다.



64비트 Windows 운영 체제의 경우


  • /platform:x86으로 컴파일된 어셈블리는 WOW64에서 실행되는 32비트 CLR에서 실행됩니다.

  • /platform:anycpu로 컴파일된 실행 파일은 64비트 CLR에서 실행됩니다.

  • /platform:anycpu로 컴파일된 DLL은 이 DLL이 로드된 프로세스와 동일한 CLR에서 실행됩니다.








*)

/platform:x86 으로 컴파일된 DLL,

/platform:anycpu 으로 컴파일된 어셈블리(exe)가 있다.

이 어셈블리에서 참조 추가로 x86으로 컴파일된 DLL을 참조 추가하였을때, x64 에서 어셈블리를 실행하면 x86 DLL 사용 시 런타임 예외가 발생한다.





댓글 없음:

댓글 쓰기