Как скомпилировать и выполнить автономный исполняемый файл SML-NJ

Я видел еще одну ссылку для ответа, но я не понимаю, что такое base.cm и для чего он нужен?

1 ответ

Решение

Вы задаете два вопроса.

Что такое base.cm и для чего он нужен?

Это базовая библиотека. Это позволяет использовать встроенные функции.

Как скомпилировать и выполнить автономный исполняемый файл SML-NJ

Предполагая, что вы следовали учебному пособию Джеспера Ринберга о том, как выполнить образ кучи, следующее, что нужно для того, чтобы SML/NJ создал отдельный исполняемый файл, - это преобразование этого образа кучи. Можно предположить, что это можно сделать гипотетически, используя heap2exec, инструмент, который берет образ кучи, например файл.x86-linux, сгенерированный в моей системе, и генерирует файл.asm, который можно собрать и связать.

К сожалению, этот инструмент не очень ухоженный, поэтому вам придется

  1. Перейдите на страницу smlnj.org и исправьте ссылку для скачивания, удалив "www." (эта страница и страница SourceForge не содержат одинаковых объяснений или предположений о количестве аргументов, и ни одна из ссылок на страницу не работает).
  2. Загрузите и извлеките этот инструмент и исправьте скрипт build, чтобы он указывал на ваш инструмент ml-build
  3. Исправьте использование аргумента инструмента, изменив [inf, outf] в [_, inf, outf]
  4. Бежать ./build который генерирует 'heap2asm.x86-linux' в моей системе
  5. Например, чтобы создать файл.asm для самой программы heap2asm, запустите

    sml @SMLload heap2asm.x86-linux heap2asm.x86-linux heap2asm.s
    
  6. На данный момент я, к сожалению, не смог создать исполняемый файл, который работает. Например, если вы бежите gcc -c heap2asm.s а также ld heap2asm.o вы получаете предупреждение о пропаже _start этикетка. Получающийся в результате исполняемый файл segfaults, даже если вы переименуете существующий _sml_heap_image ярлык для _start, То есть, похоже, что фрагмент кода входа, который обычно доставляет среда выполнения, здесь отсутствует.

  7. На этом этапе откажитесь от SML/NJ и используйте MLton для создания автономных двоичных файлов.

Другие вопросы по тегам