Reputation: 53
I have seen one other answer link but what I don't understand is what is basis.cm and what's it's use?
Upvotes: 2
Views: 1470
Reputation: 16105
You are asking two questions.
What is basis.cm and what's it's use?
This is the Basis library. It allows the use of built-in functions.
How to compile and execute a stand-alone SML-NJ executable
Assuming you followed Jesper Reenberg's tutorial on how to execute a heap image, the next thing you need in order to have SML/NJ produce a stand-alone executable is to convert this heap image. One should hypothetically be able to do this using heap2exec, a tool that takes the heap image, e.g. the .x86-linux file generated on my system, and generates an .asm file that can be assembled and linked.
Unfortunately, this tool is not very well-maintained, so you have to
[inf, outf]
to [_, inf, outf]
./build
which generates 'heap2asm.x86-linux' on my systemFor example, in order to generate an .asm file for the heap2asm program itself, run
sml @SMLload heap2asm.x86-linux heap2asm.x86-linux heap2asm.s
At this point, I have unfortunately been unable to produce an executable that works. E.g. if you run gcc -c heap2asm.s
and ld heap2asm.o
, you get a warning of a missing _start
label. The resulting executable segfaults even if you rename the existing _sml_heap_image
label to _start
. That is, it seems that a piece of entry code that the runtime environment normally delivers is missing here.
At this point, discard SML/NJ and use MLton for producing stand-alone binaries.
Upvotes: 4