0

私はWindowsを使用してMain.exeおり、Mono C#コンパイラでコンパイルされた事前コンパイルを試みていますgmcs(これも試しmcsました)。

>mono --aot Main.exe
Mono Ahead of Time compiler - compiling assembly C:\test\Main.exe 
Code: 21   Info: 4 Ex Info: 8 Class Info: 30 PLT: 2 GOT 
Info: 6 GOT Info Offsets: 8 GOT: 12 
Executing the native assembler: as C:\DOCUME~1\MigueldeIcaza\LOCALS~1\Temp\mono_aot_D2 ID2U -o C:\DOCUME~1\MigueldeIcaza\LOCALS~1\Temp\mono_aot_D2ID2U.o 
Executing the native linker: gcc -shared --dll -mno-cygwin -o C:\test\Main.exe.dll C:\DOCUME~1\MigueldeIcaza\LOCALS~1\Temp\mono_aot_D2ID2U.o 
Compiled 2 out of 2 methods (100%) Methods without GOT slots: 2 (100%) 
Direct calls: 0 (100%) JIT time: 0 ms, Generation time: 0 ms, 
Assembly+Link time: 319 ms. GOT slot distribution:
image: 1

しかし、それはを生成し、実行可能ファイルMain.exe.dllが必要です。それは可能ですか?

アップデート:

書き込み保護によって AOT/ビルド プロセスをインターセプトしましMain.exe.dllmono_aot_FZKP2U.oが、まだ運がありません。

>gcc -o Main2.exe mono_aot_FZKP2U.o
/mingw/lib/libmingw32.a(main.o):main.c:(.text+0x104): 
undefined reference to `WinMain@16'
collect2: ld returned 1 exit status`

2009 年 10 月 30 日更新:

Jb Evains の回答を読んだ後、もう一度 Main.exe.dll を mono で実行しようとしましたが、成功しませんでした。

C:\test>mono Main.exe.dll
Mono-INFO: アセンブリ ローダーのプローブ場所: 'C:\PROGRA~1\MONO-2~1.3\lib\mono\1.
0\mscorlib.dll'.
Mono-INFO: Image addref mscorlib 003E5F48 -> C:\PROGRA~1\MONO-2~1.3\lib\mono\1.0
\mscorlib.dll 00B42BC0: 2

Mono-INFO: AOT は AOT モジュール C:\PROGRA~1\MONO-2~1.3\lib\mono\1.0\msc をロードできませんでした
orlib.dll.dll: 指定されたファイルが見つかりません。


Mono-INFO: アセンブリ ローダーが次の場所からアセンブリをロードしました: 'C:\PROGRA~1\MONO-2~1.
3\lib\mono\1.0\mscorlib.dll'.
Mono-INFO: 構成を解析しようとしています: 'C:\PROGRA~1\MONO-2~1.3\lib\mono\1.0\msco
rlib.dll.config'.
Mono-INFO: 構成を解析しようとしています: 'C:\PROGRA~1\MONO-2~1.3\lib\..\etc\mono\a
ssemblies\mscorlib\mscorlib.config'.
Mono-INFO: アセンブリ mscorlib 003E5F48 がドメイン Main.exe.dll、ref_count=1 に追加されました

Mono-INFO: 構成を解析しようとしています: 'C:\PROGRA~1\MONO-2~1.3\lib\..\etc\mono\c
onfig」。
Mono-INFO: アセンブリ ローダーのプローブ場所: 'Main.exe.dll'。
アセンブリ 'Main.exe.dll' を開けません: ファイルに有効な CIL イメージが含まれていません。
Mono-INFO: ドメイン Main.exe.dll 00B04EA0、アセンブリ mscorlib 003E5F48、r をアンロードしています。
efcount=1

Mono-INFO: アセンブリ mscorlib [003E5F48] をアンロードしています。
Mono-INFO: イメージをアンロードしています C:\PROGRA~1\MONO-2~1.3\lib\mono\1.0\mscorlib.dll [00B
42BC0]。
4

1 に答える 1

5

Mono AOT コンパイル プロセスでは、実行可能ファイルは作成されません。実際にライブラリを作成します。Mono は、可能であれば AOTed コードを自動的に取得します。通常のように mono Main.exe を実行するだけです。MONO_LOG_LEVEL=debugMono がネイティブ コードを取得しているかどうかは、環境変数を指定することで確認できます。

于 2009-10-28T17:13:25.343 に答える