Welcome to MSDN Blogs Sign in | Join | Help

Cross compilation in the 64-bit .NET Framework world for platform specific features

In today’s world, a lot of applications are written targeting both the 32-bit and/or the 64-bit platform. Using cross compilation, users can now create applications using the .NET Framework which are platform agnostic. This is achieved by the data in the PE header maintained for each app in the .NET Framework world.

 

Compilers like that of C# and C++ language use the /platform switch to empower the user to choose the platform type, they want their binaries to be executed on. Using this switch the users can just compile their binaries to be anycpu binaries – which implies that they are platform agnostic and execute natively on the 32-bit and the 64-bit platforms. This also enables users to compile binaries specific to a targeted platform – be it x86, x64 or the itanium platform.

 

This looks to be a perfect solution for compilation of binaries that do not have any feature dependencies on platform specific architectures. Now, lets take a hypothetical scenario where a language supports some features that are 32-bit specific and some features that are platform agnostic. In such cases how should the compiler behave? Here is description of the way I feel applications should be targeted in such cases

 

Compilation from

Anycpu

X86

X64

IA64

32-bit compiler on a 32-bit machine

Invokes the 32-bit compiler

Invokes the 32-bit compiler

Error

Error

32-bit WoW compiler on a 64-bit machine

Invokes the 64-bit compiler as another process and compiles using the same

Invokes the 32-bit compiler

Invokes the 64-bit compiler as another process and compiles using the same

Invokes the 64-bit compiler as another process and compiles using the same

64-bit compiler

Invokes the 64-bit compiler

Invokes the 32-bit compiler as another process and compiles using the same

Invokes the 64-bit compiler

Invokes the 64-bit compiler

 

Apart from the compiler, the users should also be aware of the compiler they are compiling from and the targeted scenarios. For e.g. Let us consider an application which is dependent of features not supported in the 64-bit world. The user compiles the same to a binary of the type anycpu from a 32-bit machine. The user then tries to execute the same binary on a 64-bit machine. In most of the cases the user is bound to run into issues and a Bad Format Exception might be thrown. Thus, it is not true that in all scenarios, cross compilation always works.

 

In case you believe that there is some other way, let me know too.
Published Monday, March 06, 2006 11:20 PM by GauravS

Comment Notification

If you would like to receive an email when updates are made to this post, please register here

Subscribe to this post's comments using RSS

Comments

# Moving from 32-bit to 64-bit application development on .NET Framework

Tuesday, March 07, 2006 2:17 AM by Gaurav Seth's WebLog
This blog aims at clarifying the issues which 32-bit developers might be having when they start migrating...

# 64-Bit .NET Framework Programming

Monday, May 12, 2008 12:46 AM by Warren Tang

64-Bit.NETFrameworkProgrammingInformation

http://msdn.microsoft.com/en-us/netframework/aa496329...

Leave a Comment

(required) 
required 
(required) 

  
Enter Code Here: Required
 
Page view tracker