代码之家  ›  专栏  ›  技术社区  ›  Jonas Elfström

Windows Exe上的Mono AOT给了我一个DLL

  •  0
  • Jonas Elfström  · 技术社区  · 15 年前

    我在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/构建过程 MI. EX.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的答案之后,我再次尝试用mono运行main.exe.dll,但没有成功。

    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 回复  |  直到 15 年前
        1
  •  5
  •   Jb Evain    15 年前

    Mono AOT编译过程不会创建可执行文件。它确实创建了一个库。如果可能的话,Mono会自动获取AOTED代码,您只需像通常那样运行mono main.exe即可。可以通过指定环境变量进行检查 MONO_LOG_LEVEL=debug 如果Mono接收到本机代码。