gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 06:43:15 33 4
gpt4 key购买 nike

我有一个可以作为堆镜像运行的 SML/NJ 程序,我想创建一个独立的可执行二进制文件。然而,heap2exec SML/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)

我看了 heap2exec shell 脚本和关键行(变量扩展)执行以下操作:
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生成正确的架构?

最佳答案

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

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

关于macos - 如何在 Mac 上构建 SML/NJ 可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8238344/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com