【问题标题】:mono mkbundle windows单声道 mkbundle 窗口
【发布时间】:2009-12-22 18:01:30
【问题描述】:

我在 cygwin 上使用了 mono mkbundle 来编译一个 dot net 应用程序,它工作正常。我使用了这里的说明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)

感谢您提供任何信息,

史密斯

【问题讨论】:

    标签: mono cygwin mkbundle


    【解决方案1】:

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

    【讨论】:

    • objdump 说 mono.dll 已经嵌入到应用程序中,即使它是在没有“--static”标志的情况下编译的?
    • 它应该从生成的 exe 中引用,而不是嵌入。这就是为什么您需要在 PATH 或当前目录中提供 mono.dll 和其他 DLL。
    • 根据文档,Windows 不支持 --static 标志。
    • @ShdNx: 和 Mono 2.8 及更高版本不再依赖 glib/gthread。现在这应该不是问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-17
    • 2012-12-26
    • 1970-01-01
    相关资源
    最近更新 更多