4

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

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)

我查看了heap2execshell 脚本,关键行(变量扩展)执行以下操作:

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来生成正确的架构?

4

1 回答 1

0

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

我知道您专门询问 SML/NJ,但 MLton 支持 64 位,并且使此类任务变得非常容易。如果您能够使用它来生成可执行的二进制文件,您稍后可能会感谢自己。

于 2011-11-25T00:11:44.370 回答