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

如何编译和执行独立的SML-NJ可执行文件,sml,smlnj,Sml,Smlnj,我看到了另一个答案,但我不明白什么是basis.cm,它有什么用?你问了两个问题 basis.cm是什么?它有什么用途 这是最新的。它允许使用内置函数 如何编译和执行独立的SML-NJ可执行文件 假设您遵循了Jesper Reenberg关于如何执行堆映像的教程,那么让SML/NJ生成独立可执行文件所需的下一件事就是转换此堆映像。假设可以使用heap2exec实现这一点,这是一个获取堆映像的工具,例如在我的系统上生成的.x86 linux文件,并生成一个可以组装和链接的.asm文件 不幸的是,这

我看到了另一个答案,但我不明白什么是basis.cm,它有什么用?

你问了两个问题

basis.cm是什么?它有什么用途

这是最新的。它允许使用内置函数

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

假设您遵循了Jesper Reenberg关于如何执行堆映像的教程,那么让SML/NJ生成独立可执行文件所需的下一件事就是转换此堆映像。假设可以使用heap2exec实现这一点,这是一个获取堆映像的工具,例如在我的系统上生成的.x86 linux文件,并生成一个可以组装和链接的.asm文件

不幸的是,这个工具没有得到很好的维护,因此您必须

转到并通过删除此页面中的“www”来修复下载链接,并且不包含关于参数计数的相同解释或假设,并且两个页面的下载链接都不起作用。 下载并解压缩此工具,并修复“构建”脚本,使其指向您的ml构建工具 通过将[inf,outp]更改为[\inf,inf,outp]来修复工具的参数使用 运行./build,在我的系统上生成“heap2asm.x86 linux” 例如,要为heap2asm程序本身生成.asm文件,请运行

sml @SMLload heap2asm.x86-linux heap2asm.x86-linux heap2asm.s
在这一点上,我不幸地无法产生一个可执行的工作。例如,如果您运行gcc-c heap2asm.s和ld heap2asm.o,您会收到一个缺少开始标签的警告。即使将现有的_sml_heap_图像标签重命名为_start,生成的可执行文件也会出错。也就是说,这里似乎缺少运行时环境通常提供的一段输入代码

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


如果您的代码是“标准”标准ML,您可以使用MLton生成可执行的二进制文件。@barti_ddu所以这就是我想要做的。应执行SML-NJ单机版。我遵循上面提到的链接,使用了SMLload参数。这是最好的方法还是有其他方法,如果这种方法会导致任何问题?MLton是SML的优化编译器,与SML/NJ无关,我提出了一个前提,“编译SML/NJ”实际上是指“编译SML”:;只要访问,阅读它的描述,看看它是否合适。@SaiKiran:你仍然不太清楚你想要的是由任何SML编译器提供的独立可执行文件,还是严格地由SML/NJ编译器提供的独立可执行文件。我假设您想要后者,因为您链接到的Jesper Reenberg指南已经提供了使用MLton生成独立可执行文件的最终方法。可能不是完全独立的可执行文件-但我发现SMLofNJ.exportFn相对容易使用。我与3行或4行VBScript一起使用,创建了用于启动SML程序的可单击图标。我会给出一个链接,但目前SML/NJ网站似乎正在维护中。让我们假设我有一个main.SML文件,main.cm有basis.cm,它允许我们使用内置函数。我想知道还有什么其他文件可以添加来支持所有的功能,比如C++中,我们可以使用包含所有头文件。在新泽西州的SML有类似的吗