如何编译和执行独立的 SML-NJ 可执行文件
How to compile and execute a stand-alone SML-NJ executable
我看到了另一个答案link,但我不明白basis.cm是什么,它有什么用?
你问了两个问题。
What is basis.cm and what's it's use?
这是Basis library。它允许使用内置函数。
How to compile and execute a stand-alone SML-NJ executable
假设您遵循了 Jesper Reenberg 关于如何执行堆映像的教程,为了让 SML/NJ 生成独立的可执行文件,您需要做的下一件事是转换此堆映像。假设应该能够使用 heap2exec 来执行此操作,这是一种获取堆映像的工具,例如在我的系统上生成的 .x86-linux 文件,并生成一个可以组装和 linked.
的 .asm 文件
不幸的是,这个工具不是很好维护,所以你必须
- 转到 the smlnj.org page and fix the download-link by removing 'www.' (this page and the SourceForge page 不包含关于参数计数的相同解释或假设,并且页面的下载 link 都不起作用)。
- 下载并解压缩此工具,并修复 'build' 脚本,使其指向您的 ml-build 工具
- 通过将
[inf, outf]
更改为 [_, inf, outf]
来修复工具的参数使用
- 运行
./build
在我的系统上生成 'heap2asm.x86-linux'
例如,为了为heap2asm程序本身生成.asm文件,运行
sml @SMLload heap2asm.x86-linux heap2asm.x86-linux heap2asm.s
此时,很遗憾,我无法生成可以运行的可执行文件。例如。如果您 运行 gcc -c heap2asm.s
和 ld heap2asm.o
,您会收到缺少 _start
标签的警告。即使您将现有的 _sml_heap_image
标签重命名为 _start
,生成的可执行文件也会出现段错误。也就是这里好像少了一段运行time环境正常下发的入口代码
此时,丢弃 SML/NJ 并使用 MLton 生成独立二进制文件。
我看到了另一个答案link,但我不明白basis.cm是什么,它有什么用?
你问了两个问题。
What is basis.cm and what's it's use?
这是Basis library。它允许使用内置函数。
How to compile and execute a stand-alone SML-NJ executable
假设您遵循了 Jesper Reenberg 关于如何执行堆映像的教程,为了让 SML/NJ 生成独立的可执行文件,您需要做的下一件事是转换此堆映像。假设应该能够使用 heap2exec 来执行此操作,这是一种获取堆映像的工具,例如在我的系统上生成的 .x86-linux 文件,并生成一个可以组装和 linked.
的 .asm 文件不幸的是,这个工具不是很好维护,所以你必须
- 转到 the smlnj.org page and fix the download-link by removing 'www.' (this page and the SourceForge page 不包含关于参数计数的相同解释或假设,并且页面的下载 link 都不起作用)。
- 下载并解压缩此工具,并修复 'build' 脚本,使其指向您的 ml-build 工具
- 通过将
[inf, outf]
更改为[_, inf, outf]
来修复工具的参数使用
- 运行
./build
在我的系统上生成 'heap2asm.x86-linux' 例如,为了为heap2asm程序本身生成.asm文件,运行
sml @SMLload heap2asm.x86-linux heap2asm.x86-linux heap2asm.s
此时,很遗憾,我无法生成可以运行的可执行文件。例如。如果您 运行
gcc -c heap2asm.s
和ld heap2asm.o
,您会收到缺少_start
标签的警告。即使您将现有的_sml_heap_image
标签重命名为_start
,生成的可执行文件也会出现段错误。也就是这里好像少了一段运行time环境正常下发的入口代码此时,丢弃 SML/NJ 并使用 MLton 生成独立二进制文件。