0

我在 cygwin 上使用了 mono mkbundle 来编译一个点网应用程序,它工作正常。我使用了这里的说明c# cywgwin mono mkbundle windows 7 - cannot compile file

除非以下文件(从 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 应用程序作为编译后的单应用程序变成大约 5megs,并且这需要与额外的 4megs 程序集一起分发才能运行......e)

谢谢你的任何信息,

铁匠铺

4

1 回答 1

1

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

于 2009-12-22T19:22:53.970 回答