微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

完整静态编译的linux mono上的F#

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

如何区分超链接和本地执行的任何东西?

C#编译未知的MSBuild错误MonoDevelop Linux

在Mono中运行的C#应用​​程序中更改当前的Linux用户

如何在Linux上用C#启动服务

获得Mono和Firebirdembedded式Linux的工作

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

尝试AOT 。 但是,它是有限的。

更新:

我想我已经跳过了一个答案有点太快,并没有足够深入把它变成有用的东西。 AOT会将代码预编译到共享库中,在正确的条件下可能会提高性能

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐