2009-12-22 78 views
0

我已經在cygwin上使用單聲道mkbundle來編譯一個點網絡應用程序,它工作正常。我使用這裏的指令c# cywgwin mono mkbundle windows 7 - cannot compile file單聲道mkbundle窗口

除非以下文件(從mono/bin複製而來)與應用程序位於同一文件夾中,否則完成的應用程序將不會運行:mono.dll,libglib-2.0-0.dll ,libgthread-2.0-0.dll,ZLIB.DLL

這一切似乎確定 - 但是如果我運行命令(cygwin的版本)

$ objdump -p mycompiledapp.exe | grep "DLL Name"
(其中 「mycompiledapp.exe」 是的名稱應用程序)

文件mono.dll,libglib-2.0-0.dll,libgthread-2.0-0。 DLL已經嵌入我的應用程序。

爲什麼這些文件需要與我的應用程序位於同一文件夾中才能正常工作?

編譯時我做了一些不正確的事嗎?

有什麼辦法之一:
一)未在我的應用程序中嵌入這些組件(這樣他們就可以用它來分發)
B),所以它知道這些組件嵌入到應用程序編譯我的應用程序,並使用那些? (而不必分發這些文件與應用程序)

它只是似乎很痛苦,分發這些文件與我的應用程序,當他們已經嵌入其中! (特別是考慮到這些組件的大小 - 一個50k點網絡應用程序成爲一個編譯單聲道應用程序大約5megs,這需要分配一個額外的4兆組件爲它的功能... e)

謝謝你的任何信息,

鐵匠鋪

回答

1

您可以在運行mkbundle時添加--static標誌。請注意,這將嵌入LGPL的Mono庫(mono.dll)。至於lib​​glib和libgthread,你應該找到它們的靜態版本並在鏈接時使用它。請注意,在您的程序中嵌入LGPL庫將有其他implications

+0

objdump說mono.dll已經嵌入到應用程序中,即使它沒有編譯「--static」標誌? – frank 2009-12-23 12:40:58

+0

它應該** **從生成的exe引用,但不嵌入。這就是爲什麼你需要mono.dll和其他DLL在PATH或當前目錄中可用的原因。 – Gonzalo 2009-12-23 18:39:55

+1

根據文檔,Windows不支持--static標誌。 – ShdNx 2010-10-11 15:15:42