#makefile #ocaml
Вопрос:
Файл make был выполнен, в каждом файле нет сообщений об ошибках. Однако в терминале я получил:
File "_none_", line 1: Error: Required module `Prettyprint' is unavailable
Это Prettyprint.ml
один из моих файлов. Что означает этот отчет об ошибке? Спасибо вам за вашу помощь.
Первое редактирование: мой файл makefile выглядит так:
@echo "# Lexer amp; Parser:" ocamlc -g -c parser.mli lexer.ml parser.ml @echo "# mainfile" ocamlc -g -c TransitionalSemantics.ml ocamlc -g -o main str.cma AbstractSyntax.cmo TransitionalSemantics.cmo Prettyprint.cmo StaticSemantics.cmo lexer.cmo parser.cmo
В моем терминале отчет об ошибке начинается с:
ocamlc -g -o main str.cma AbstractSyntax.cmo TransitionalSemantics.cmo Prettyprint.cmo StaticSemantics.cmo lexer.cmo parser.cmo File "_none_", line 1: Error: Required module `Prettyprint' is unavailable make: *** [all] Error 2
Ответ №1:
Объектные файлы должны быть связаны в порядке, совместимом с их орграфом зависимости: если один из ваших модулей зависит от Prettyprint
модуля, он должен быть связан после prettyprint.cmo
.
Начиная с версии 4.13, сообщение об ошибке является более информативным и выглядит следующим образом
File "_none_", line 1: Error: Wrong link order: B depends on A, B depends on A
Ответ №2:
Вы должны показать, что именно вы сделали, чтобы получить эту ошибку. В противном случае нам придется гадать 🙂
Эта File "_none_"
часть означает, что вы вводите текст на верхнем уровне, поэтому файла как такового нет.
Эта Error
часть означает, что верхний уровень не может найти ваш названный модуль Prettyprint
. Возможно, вам нужно загрузить его, прежде чем вы сделаете что-то еще, что вы сделали:
# #load "prettyprint.cmo"
(Первое #
здесь-приглашение верхнего уровня. Второе-это то, что вы действительно должны напечатать.)
Если вы расширите свой вопрос, включив в него более подробную информацию, вы, возможно, получите более полезный ответ.
Комментарии:
1. Спасибо вам за ваш любезный ответ и руководство. Да, я уточню свой вопрос. Действительно, из вашего ответа я узнал, как продвигаться на высший уровень.