如何编译和执行独立的SML-NJ可执行文件

时间:2015-12-01 08:28:25

标签: sml smlnj

我已经看到了另一个答案link但我不明白的是什么是基础.m是什么用的?

1 个答案:

答案 0 :(得分:4)

你问两个问题。

  

什么是基础.m以及它的用途是什么?

这是Basis library。它允许使用内置函数。

  

如何编译和执行独立的SML-NJ可执行文件

假设您按照Jesper Reenberg关于如何执行堆映像的教程,为了让SML / NJ生成独立的可执行文件,您需要的下一件事就是转换此堆映像。假设应该使用 heap2exec 来做这件事,这是一个获取堆映像的工具,例如:在我的系统上生成的.x86-linux文件,并生成一个可以汇编和链接的.asm文件。

不幸的是,这个工具维护得不是很好,所以你必须

  1. 转到the smlnj.org page并修复下载链接,删除' www。' (此页面和the SourceForge page不包含有关参数计数的相同解释或假设,并且页面的下载链接均无效。)
  2. 下载并解压缩此工具,并修复&#​​39; build'脚本所以它指向你的ml-build工具
  3. 通过将[inf, outf]更改为[_, inf, outf]
  4. 来修复工具的参数使用
  5. 运行./build生成' heap2asm.x86-linux'在我的系统上
  6. 例如,为了生成heap2asm程序本身的.asm文件,请运行

    sml @SMLload heap2asm.x86-linux heap2asm.x86-linux heap2asm.s
    
  7. 此时,我遗憾地无法生成可行的可执行文件。例如。如果您运行gcc -c heap2asm.sld heap2asm.o,则会收到缺少_start标签的警告。即使您将现有_sml_heap_image标签重命名为_start,也会产生可执行的段错误。也就是说,似乎这里缺少运行时环境通常提供的一段入口代码。

  8. 此时,丢弃SML / NJ并使用MLton生成独立的二进制文件。

相关问题