【问题标题】:F# on linux mono with Full Static Compilation具有完全静态编译的 linux mono 上的 F#
【发布时间】:2011-09-15 18:45:50
【问题描述】:

我希望能够在 linux 系统 (Debian) 上运行用 F# 编写的代码,但我不太可能在其上安装 Mono。有什么方法可以将 F# 编译为完全静态的并且绝对不依赖于 Mono?基本上只是得到一个可执行的二进制文件,我可以像任何其他 linux 二进制文件一样运行它?

【问题讨论】:

标签: linux f# mono


【解决方案1】:

即使在精简帐户上,您也可以编译自己的 Mono 版本 - 这并不是特别难,请参阅 http://www.mono-project.com/Compiling_Mono。有一些依赖项,但它们并不难找到。不过,您需要在大多数运行调用前加上 mono,例如 mono myapp.exe 而不是 ./myapp.exe

【讨论】:

    【解决方案2】:

    试试AOT。但要注意它的局限性。

    更新:

    我想我跳得太快了,还没有深入到把它变成有用的东西。 AOT 会将代码预编译到共享库中,在适当的条件下这可能会提高性能。

    不过,如果您要求根本不在客户端机器中安装单声道运行时(为什么?),我认为您应该尝试mkbundle / mkbundle2。这将产生一个巨大的自包含可执行文件(C# Hello World + deps 为我的机器生成了一个大约 2.5MB 的文件......使用 -z 我得到了大约 900k)。您可以尝试将其与 Linker 结合使用,以进一步去除您的应用程序所依赖的库中未使用的部分。

    至于您的第二个问题,F# 编译器将像任何其他 .NET 编译器一样生成 CIL。所以,应该没关系。尽管如此,如果您的应用程序包含单 AOT 编译器尚不支持的 IL 指令(例如,您需要 mkbundle2 来处理泛型)或对无法安装在 Debian 机器中的外部链接库的依赖项,那么您就不走运了。猜猜你将不得不自己做一些试错操作。

    【讨论】:

    • 我看过但不确定我是否理解。一直在谈论用单声道“运行”你的程序......但我想编译它并能够像往常一样运行它。此外,即使没有 JIT,F# 也能工作。
    • @adam 这是我不明白的地方。您对文件具有可执行 + 写入权限(并且可能可以访问 gcc) - 为什么不能只编译单声道?
    • @jpalmer - 我实际上可能可以,但是系统管理员很挑剔,所以我只是在研究我的选择。
    猜你喜欢
    • 1970-01-01
    • 2021-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-21
    • 2013-12-10
    • 1970-01-01
    相关资源
    最近更新 更多