Mono 单光束窗口

Mono 单光束窗口,mono,cygwin,mkbundle,Mono,Cygwin,Mkbundle,我在cygwin上使用mono mkbundle编译了一个dot net应用程序,它运行良好。我使用了这里的说明 完成的应用程序将不会运行,除非以下文件(从mono/bin文件夹复制)与应用程序位于同一文件夹中:mono.dll、libglib-2.0-0.dll、libgthread-2.0-0.dll、zlib.dll 这一切似乎都没问题——但是如果我运行命令(来自cygwin) $objdump-p mycompiledapp.exe | grep“DLL Name” (其中“mycomp

我在cygwin上使用mono mkbundle编译了一个dot net应用程序,它运行良好。我使用了这里的说明

完成的应用程序将不会运行,除非以下文件(从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等文件已经嵌入到我的应用程序中

当这些文件已经嵌入到我的应用程序中时,为什么这些文件需要与我的应用程序位于同一文件夹中才能正常工作

编译时我是否做了一些不正确的事情

有没有办法做到这一点:
a) 不在我的应用程序中嵌入这些程序集(以便它们可以随应用程序一起分发)
b) 编译我的应用程序,让它知道这些程序集嵌入到应用程序中,然后使用它们?(并且不必随应用程序分发这些文件)

在我的应用程序中分发这些文件似乎很痛苦,因为它们已经嵌入其中了!(特别是考虑到这些程序集的大小,一个50k的dot-net应用程序作为一个编译过的mono应用程序会变为大约5mg,并且需要额外分发4兆的程序集才能正常运行…e)

谢谢你提供的任何信息


Smithy

您可以在运行mkbundle时添加--static标志。请注意,这将嵌入Mono库(Mono.dll),即LGPL。至于libglib和libgthread,您应该找到它们的静态版本,并在链接时使用它们。请注意,在您的程序中嵌入LGPL库将有其他功能。

objdump说mono.dll已经嵌入到应用程序中,即使它在编译时没有“-static”标志。它应该从生成的exe中引用,而不是嵌入。这就是为什么您需要mono.dll和其他dll在您的路径或当前目录中可用。根据文档,Windows不支持--static标志。@ShdNx:和mono 2.8及以上版本不再依赖glib/gthread。这现在应该不是问题了。