2011-12-31 65 views
0

我想讓我的程序用Visual C#2010寫在Linux上。爲此,我使用了mkbundle功能,以便潛在的客戶端不必安裝mono。不幸的是,我不懂Linux或Mono,所以我只是遵循這個:c# cywgwin mono mkbundle windows 7 - cannot compile fileC#程序在Linux下不能在單聲道下工作。

但由於某種原因,mkbundle在最後寫入[FAIL],並說了一些關於「沒有這樣的文件或目錄」的信息。我已經粘貼了下面的全文。有人知道如何解決這個問題嗎?

$ mkbundle -o MyProgram MyProgram.exe --deps 
OS is: Windows 
Sources: 1 Auto-dependencies: True 
    embedding: C:\cygwin\home\Synaps\MyProgram.exe 
    embedding: C:\Mono-2.10.8\lib\mono\4.0\mscorlib.dll 
    embedding: C:\Mono-2.10.8\lib\mono\4.0\System.Drawing.dll 
    embedding: C:\Mono-2.10.8\lib\mono\4.0\System.dll 
    embedding: C:\Mono-2.10.8\lib\mono\4.0\Mono.Security.dll 
    embedding: C:\Mono-2.10.8\lib\mono\4.0\System.Configuration.dll 
    embedding: C:\Mono-2.10.8\lib\mono\4.0\System.Xml.dll 
    embedding: C:\Mono-2.10.8\lib\mono\4.0\System.Security.dll 
    embedding: C:\Mono-2.10.8\lib\mono\4.0\System.Windows.Forms.dll 
    embedding: C:\Mono-2.10.8\lib\mono\4.0\Accessibility.dll 
    embedding: C:\Mono-2.10.8\lib\mono\4.0\Mono.WebBrowser.dll 
    embedding: C:\Mono-2.10.8\lib\mono\4.0\Mono.Posix.dll 
    embedding: C:\Mono-2.10.8\lib\mono\4.0\System.Data.dll 
    embedding: C:\Mono-2.10.8\lib\mono\4.0\Mono.Data.Tds.dll 
    embedding: C:\Mono-2.10.8\lib\mono\4.0\System.Transactions.dll 
    embedding: C:\Mono-2.10.8\lib\mono\4.0\System.EnterpriseServices.dll 
    embedding: C:\Mono-2.10.8\lib\mono\4.0\AForge.Imaging.dll 
    embedding: C:\Mono-2.10.8\lib\mono\4.0\AForge.dll 
    embedding: C:\Mono-2.10.8\lib\mono\4.0\AForge.Math.dll 
Compiling: 
as -o temp.o temp.s 
gcc -mno-cygwin -g -o MyProgram -Wall temp.c `pkg-config --cflags --libs mono-2|d 
os2unix` temp.o 
: No such file or directory 
temp.c: In function `main': 
temp.c:143: warning: implicit declaration of function `g_utf16_to_utf8' 
temp.c:143: warning: assignment makes pointer from integer without a cast 
temp.c:158: warning: assignment makes pointer from integer without a cast 
[Fail] 

當我試圖Linux虛擬機上使用mkbundle,我成功地獲得了Linux的可執行文件,但得到以下錯誤,當我運行在Ubuntu Linux操作系統的虛擬機程序(由Oracle VM虛擬盒):

Unhandled Exception: System.ArgumentException: A null reference or invalid value was found [GDI+ status: InvalidParameter] 
    at System.Drawing.GDIPlus.CheckStatus (Status status) [0x00000] in <filename unknown>:0 
    at System.Drawing.Bitmap.SetResolution (Single xDpi, Single yDpi) [0x00000] in <filename unknown>:0 
    at (wrapper remoting-invoke-with-check) System.Drawing.Bitmap:SetResolution (single,single) 
    at AForge.Imaging.ColorReduction.ColorImageQuantizer.ReduceColors (System.Drawing.Bitmap image, Int32 paletteSize) [0x00000] in <filename unknown>:0 
    at FootMeasure.Program.Main (System.String[] args) [0x00000] in <filename unknown>:0 
[ERROR] FATAL UNHANDLED EXCEPTION: System.ArgumentException: A null reference or invalid value was found [GDI+ status: InvalidParameter] 
    at System.Drawing.GDIPlus.CheckStatus (Status status) [0x00000] in <filename unknown>:0 
    at System.Drawing.Bitmap.SetResolution (Single xDpi, Single yDpi) [0x00000] in <filename unknown>:0 
    at (wrapper remoting-invoke-with-check) System.Drawing.Bitmap:SetResolution (single,single) 
    at AForge.Imaging.ColorReduction.ColorImageQuantizer.ReduceColors (System.Drawing.Bitmap image, Int32 paletteSize) [0x00000] in <filename unknown>:0 
    at FootMeasure.Program.Main (System.String[] args) [0x00000] in <filename unknown>:0 
+0

請輸出'pkg-config --cflags --libs mono-2 | dos2unix' – sehe 2011-12-31 03:26:47

+0

$ pkg-config --cflags --libs mono-2 | dos2unix -mno-cygwin -mms-bitfields -mwindows -IC:/Mono-2.10.8/include/mono-2.0 -mno-cyg win -mms-bitfields -mwindows -LC:/Mono-2.10.8/lib -lmono-2.0 -lws2_32 -lpsapi -l ole32 -lwinmm -loleaut32 -ladvapi32 -lversion – 2011-12-31 03:34:26

+0

也許如果你禁用gcc警告? – IanNorton 2011-12-31 08:08:11

回答

5

正如我在評論中所說的,如果你想生成一個自給自足的Linux可執行二進制文件,你不應該在Windows上使用mkbundle您應該在Linux上運行mkbundle以獲得Linux可執行文件(您可能應該關心32位的Linux-X86和64位的Linux-x86-64,這些不同)。

我建議你在Linux機器上編譯和運行你的應用程序(如果你願意的話,你甚至可以在虛擬機內部安裝一個Linux系統)。所以最簡單的方法是在您的機器上安裝一個Linux發行版(例如Debian)

我不認爲你會很容易找到一個交叉編譯器能編譯,在Windows中,一個程序針對Linux操作系統。

你正在做什麼(在Windows上運行mkbundle)正在生成一個Windows可執行文件(用於Cygwin),它不能給你一個Linux二進制可執行文件,無論你嘗試什麼選項。

+0

我已經完成了,請查看已編輯的問題以獲取詳細信息。儘管mkbundle成功運行,但我又遇到了一些錯誤。 – 2012-01-04 09:46:04

+0

@TofigHasanov在沒有運行mkbundle的情況下在linux虛擬機上運行程序? – IanNorton 2012-01-04 20:58:13

+0

當我簡單地使用「mono ProgramName.exe參數」時,它會產生與運行「mkbundled」版本(以未處理的異常:System.ArgumentException:開頭的那個版本)相同的錯誤: – 2012-01-05 09:03:37

相關問題