2009-10-28 64 views
0

我在Windows上,並且我正在嘗試編譯時使用的是Mono C#編譯器gmcs(也試過mcs)的Main.exe在Windows EXE的單聲道AOT給了我一個DLL

>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,我想一個可執行。 這可能嗎?

更新:

我截獲了寫保護Main.exe.dll的AOT /構建過程,現在我有一個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 `[email protected]' 
collect2: ld returned 1 exit status` 

更新2009-10-30:

在閱讀Jb Evains的答案後,我再次嘗試用單聲道壓縮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]. 
+0

你的問題在於gcc調用,它明確地將其編譯到庫中......也許這是一個想要的行爲? – Bobby 2009-10-28 12:14:01

+0

是的,但是mono_aot_D2ID2U.o在這個過程中被刪除了,所以我沒有機會自己運行gcc。 – 2009-10-28 12:24:00

+0

另外文檔提示它在* nix下工作。 http://mono-project.com/AOT – 2009-10-28 12:25:03

回答

5

Mono AOT編譯過程不會創建可執行文件。它確實創建了一個圖書館。如果可能的話,單聲道會自動拾取AOTed代碼,您只需像通常那樣運行單聲道Main.exe。如果Mono選取本地代碼,則可以通過指定環境變量MONO_LOG_LEVEL=debug進行檢查。

+0

謝謝,不知道MONO_LOG_LEVEL。 – 2009-10-30 07:30:43

+0

我無法讓dll運行。看到我對這個問題的更新。 – 2009-10-30 07:35:17

+0

那麼,你不能«運行»一個dll。正如我所說的,運行'mono Main.exe',單聲道將爲您加載Main.exe.dll。 – 2009-10-30 09:39:10