1

私のシステムのように構成されたコンパイル済みをC#使用してコンソールアプリケーションを作成しました。MonoDevelopMono 3.2.1AnyCPUUbuntu

このアプリケーションを何らかの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た。AnyCPUMonoMonoDevelop

:~$ 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 つのモード ( AnyCPUx86および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

4

0 に答える 0