2009-12-22 81 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