Как создать исполняемый файл SML / NJ на Mac - PullRequest
4 голосов
/ 23 ноября 2011

У меня есть программа 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 и в ключевых строках (с расширенной переменной) выполните следующие действия:

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 для генерации правильной архитектуры?

1 Ответ

0 голосов
/ 25 ноября 2011

Попробуйте добавить CFLAGS=-m32 в качестве переменной окружения. Это стандартный способ заставить его создать 32-битный объектный файл.

Я знаю, что вы спрашиваете конкретно о SML / NJ, но MLton имеет 64-битную поддержку и делает эту задачу действительно простой. Вы можете поблагодарить себя позже, если сможете использовать его для генерации исполняемых двоичных файлов.

...