私のシステムのように構成されたコンパイル済みをC#
使用してコンソールアプリケーションを作成しました。MonoDevelop
Mono 3.2.1
AnyCPU
Ubuntu
このアプリケーションを何らかのWindows 7 64bit
システムに取り込んで実行すると、タスク マネージャーのリストに*32
プロセス名の接尾辞が表示されます。それは 32bit プログラムとして実行されているということではないですか? このアプリケーションを で実行するにはどうすればよい64bit
ですか?
[アップデート]
コメントで指摘されたように、私がWindows 7
マシンで使用しているのは Microsoft の .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 を使用して、3 つのモード ( AnyCPU
、x86
およびx64
) で単純なコンソール プログラムをコンパイルしました。コンパイルしたら、3 つすべてを 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
とマークされているのは 1 つだけです。PE+
次に、Ubuntu と Windows の両方で実行してみました。
Ubuntu では、これら 3 つすべてが実行されます。しかし、残念ながら、それらが 32 ビット モードで実行されているのか 64 ビット モードで実行されているのかを言うことはできません!
Windowsでは、3つすべてが実行されている間(もちろん実行されます)、嫌いな接尾辞はコンパイルモード*32
でのみプロセス名に表示されます。x86
の欠如は*32
、 と の他の 2 つのモードが64 ビットで実行されているAnyCPU
ことを示します。x64
だから私の質問はまだ残っています.Windowsの64ビットプロセスとしてUbuntuでAnyCPU
コンパイルされたプログラムをMono
実行するにはどうすればよいですか?MonoDevelop