我已经制作了一个控制台应用程序,C#
使用MonoDevelop
编译并在我的系统中Mono 3.2.1
配置。AnyCPU
Ubuntu
当我将此应用程序放入某个Windows 7 64bit
系统并运行它时,在任务管理器列表中它会*32
按进程名称显示一个后缀。这是否意味着它作为 32 位程序运行?我应该怎么做才能运行这个应用程序64bit
?
[更新]
作为评论中的一点,让我澄清一下,在Windows 7
机器上我使用的是微软的 .Net 库而不是 Mono 的。
[更新]
我在互联网上搜索了一下,发现了以下命令,它输出了有关 Linux 中可执行文件的内容:
:~$ file /bin/bash
/bin/bash: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0xe643cefb2c672ad94e955067c511537ddbab48da, stripped
因此,我在使用and.exe
编译的文件上对其进行了测试:AnyCPU
Mono
MonoDevelop
:~$ file /ConsoleTest/bin/Release/ConsoleTest.exe
/ConsoleTest/bin/Release/ConsoleTest.exe: PE32 executable (console) Intel 80386 Mono/.Net assembly, for MS Windows
阅读维基百科页面PE 代表 32 位程序,而 PE+ 代表 64 位程序。
进一步进行测试,我使用 MS Visual Studio 以三种模式( 和 )编译了一个简单的AnyCPU
控制台x86
程序x64
。编译完成后,我将它们三个都放入了我的 Ubuntu 机器并file
在它们上尝试了命令。结果如下:
:~$ file /ConsoleTest-AnyCPU.exe
/ConsoleTest-AnyCPU.exe: PE32 executable (console) Intel 80386 Mono/.Net assembly, for MS Windows
:~$ file /ConsoleTest-x86.exe
/ConsoleTest-x86.exe: PE32 executable (console) Intel 80386 Mono/.Net assembly, for MS Windows
:~$ file /ConsoleTest-x64.exe
/ConsoleTest-x64.exe: PE32+ executable (console) x86-64 Mono/.Net assembly, for MS Windows
如您所见,只有x64
一个标记为PE+
!然后我尝试在 Ubuntu 和 Windows 中运行它们。
在 Ubuntu 中,它们三个都运行!但不幸的是,我无法说它们是在 32 位模式还是 64 位模式下运行!
在 Windows 中,虽然它们三个都运行(当然它们运行),但讨厌的*32
后缀仅在x86
编译模式下显示在进程名称中。缺少*32
表示 和 的其他两种模式AnyCPU
是x64
在 64 位运行的。
所以我的问题仍然存在:作为 Windows 中的 64 位进程,我应该怎么做才能在 Ubuntu中运行已AnyCPU
编译的程序?Mono
MonoDevelop