Macos 如何在Mac上构建SML/NJ可执行文件

Macos 如何在Mac上构建SML/NJ可执行文件,macos,smlnj,Macos,Smlnj,我有一个SML/NJ程序,可以作为堆映像运行,我想创建一个独立的可执行二进制文件。然而,SML/NJ 110.73中的heap2exec工具总是给我带来错误 我通过以下方式创建了我的堆映像tigerc.x86 darwin: ml-build sources.cm Main.main tigerc heap2asm "$heapfile" "$execfile".s cc -c -o "$execfile".o "$execfile".s ld -o "$execfile" ${RUNX} "

我有一个SML/NJ程序,可以作为堆映像运行,我想创建一个独立的可执行二进制文件。然而,SML/NJ 110.73中的
heap2exec
工具总是给我带来错误

我通过以下方式创建了我的堆映像
tigerc.x86 darwin

ml-build sources.cm Main.main tigerc
heap2asm "$heapfile" "$execfile".s
cc -c -o "$execfile".o "$execfile".s
ld -o "$execfile" ${RUNX} "$execfile".o
我可以通过使用堆映像很好地运行我的程序

sml @SMLload=tigerc.x86-darwin 
我应该能够通过

heap2exec tigerc.x86-darwin tigerc
但这就产生了错误

ld: warning: -macosx_version_min not specificed, assuming 10.7
ld: warning: ignoring file tigerc.o, file was built for unsupported file format 
which is not the architecture being linked (i386)
我查看了
heap2exec
shell脚本,关键行(变量展开)执行以下操作:

ml-build sources.cm Main.main tigerc
heap2asm "$heapfile" "$execfile".s
cc -c -o "$execfile".o "$execfile".s
ld -o "$execfile" ${RUNX} "$execfile".o
当我单独运行这些步骤时,
cc
命令生成一个x86_64
.o
文件,但是
ld
命令试图链接一个i386可执行文件。因此,我需要说服
cc
命令生成i386
.o
文件

有没有一种方法可以设置一个环境变量来获取
cc
来构建i386而不是x86\u 84?(顺便说一句,
ARCH
不起作用-它已经设置为
i386


或者,是否有其他解决方法来获得
heap2exec
以生成正确的体系结构?

尝试添加
CFLAGS=-m32
作为环境变量。这是强制它构建32位对象文件的标准方法


我知道您特别询问SML/NJ,但MLton有64位支持,这使得此类任务非常简单。如果您能够使用它来生成可执行的二进制文件,您可能会感谢您自己。

不幸的是,SML/NJ heap2exec脚本忽略了CFLAGS。