使用全静态编译的Linux单声道上的F#

时间:2011-09-15 18:45:51

标签: linux f# mono

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

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

试试AOT。但要了解它的局限性。

<强>更新

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

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

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