2011-11-23 96 views
4

我有一个SML/NJ程序,可以作为堆图像运行,并且我想创建一个独立的可执行二进制文件。但是,SML/NJ 110.73中的heap2exec工具对我来说总会产生错误。如何在Mac上构建SML/NJ可执行文件

我通过创建我的堆图像tigerc.x86-darwin如下:

ml-build sources.cm Main.main tigerc 

我可以通过

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外壳脚本,并且键线(可变膨胀)执行以下操作:

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_84? (ARCH没有办法,顺便说一句 - 它已经设置为i386)。

或者是否有另一种解决方法可以让heap2exec生成正确的体系结构?

回答

0

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

我知道你对SML/NJ有特别的要求,但是MLton有64位的支持,使得这种任务变得非常简单。如果你能够用它来生成可执行的二进制文件,你可能会后来感谢你。

+0

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

相关问题