моно AOT на Windows EXE дает мне DLL - PullRequest
0 голосов
/ 28 октября 2009

Я на 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 / build, защитив запись Main.exe.dll, и теперь у меня есть mono_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 с моно безуспешно.

C:\test>mono Main.exe.dll
Mono-INFO: Assembly Loader probing location: '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 failed to load AOT module C:\PROGRA~1\MONO-2~1.3\lib\mono\1.0\msc
orlib.dll.dll: The system cannot find the file specified.


Mono-INFO: Assembly Loader loaded assembly from location: 'C:\PROGRA~1\MONO-2~1.
3\lib\mono\1.0\mscorlib.dll'.
Mono-INFO: Config attempting to parse: 'C:\PROGRA~1\MONO-2~1.3\lib\mono\1.0\msco
rlib.dll.config'.
Mono-INFO: Config attempting to parse: 'C:\PROGRA~1\MONO-2~1.3\lib\..\etc\mono\a
ssemblies\mscorlib\mscorlib.config'.
Mono-INFO: Assembly mscorlib 003E5F48 added to domain Main.exe.dll, ref_count=1

Mono-INFO: Config attempting to parse: 'C:\PROGRA~1\MONO-2~1.3\lib\..\etc\mono\c
onfig'.
Mono-INFO: Assembly Loader probing location: 'Main.exe.dll'.
Cannot open assembly 'Main.exe.dll': File does not contain a valid CIL image.
Mono-INFO: Unloading domain Main.exe.dll 00B04EA0, assembly mscorlib 003E5F48, r
efcount=1

Mono-INFO: Unloading assembly mscorlib [003E5F48].
Mono-INFO: Unloading image C:\PROGRA~1\MONO-2~1.3\lib\mono\1.0\mscorlib.dll [00B
42BC0].

1 Ответ

5 голосов
/ 28 октября 2009

Процесс компиляции Mono AOT не создает исполняемый файл. Это действительно создает библиотеку. Mono автоматически принимает код AOTed, если это возможно, вам просто нужно запустить mono Main.exe, как обычно. Вы можете проверить, указав переменную окружения MONO_LOG_LEVEL=debug, если Mono выбирает собственный код.

...