2011-11-23 42 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腳本忽略。 –

相關問題