-
Notifications
You must be signed in to change notification settings - Fork 6
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Ошибка компиляции под Linux #16
Comments
Проблема решена:
|
Да, есть такая недоработка: относительный путь к главному модулю проекта задаётся относительно файла компилятора. Размещение папки lib также фиксировано относительно файла компилятора. Чтобы устранить этот недостаток, мне нужно чёткое описание того, как это должно работать "по-нормальному" с примерами. |
Прям вот лог при компиляции: walera@walera-lin:~/coding/gowork/src/github.com/prospero78/obGraph$ make run.app
Compiler "../src/Main.ob07" linux64exe -out "../bin/main"
Compiler
index out of range
module: HOST
line: 83
./bin/main
X connection to :0 broken (explicit kill or server shutdown).
make: *** [Makefile:3: run.app] Ошибка 1 Вот эта часть: BEGIN
GetArg(0, path);
n := LENGTH(path) - 1;
WHILE path[n] # slash DO
DEC(n)
END;
path[n + 1] := 0X
END GetCurrentDirectory; Я так подозреваю, что речь идёт о том, что |
Ну да, есть проблема с относительными путями (я всегда полный использую). Позже посмотрю. |
Чтобы не ломать совместимость с сообщением о языке -- предлагаю не делать, как подсистемы в БлекБоксе (всё-таки, когда много каталогов -- там начинается адъ), а сделать в комментариях опции компилятора. Что-то вроде такого: (* $IMPORT square=./graph/square.ob07 *)
IMPORT square; Кто желает прям полной совместимости -- пусть кладёт модули как положено. |
Лучше, наверно, сделать нормально, а не "совместимо". В общем-то, уже только символ "_" в идентификаторах не совместим с сообщением о языке. Так что... |
Ещё проще: IMPORT mSqr := "./graph/square.ob07"; Если пошла такая пьянка, то конечно -- кромсать сообщение не стоит. Но эта штука будет вполне логична и целесообразна. Опять же, это не отменяет старых условий и предотвращает компиляцию на заведомо несовместимой платформе и/или несовместимом компиляторе ( IMPORT mSqr := graph_square; А может есть какая-то разрешённая литера для разделителя?... Или условно принятая, но формальная в данном случае?)) Также сообщение разрешает уточнённое имя (но не для имени модуля, увы). Хм... Только сейчас обратил внимание в сообщении на отсутствие требования для литер "только ASCII" или "latin-1". Литеры могут быть какие угодно. Это, прям воодушевляет)) |
Выглядит довольно хорошо, мне понравилось. |
А вообще, согласен. Не надо правила переутяжелять, соображения два:
|
Я исправил работу с относительными путями (вроде бы). Проверяй. |
Ага. Посмотрим)) |
Не может быть то же самое Compiler Что пишет вообще? |
Может я старый вариант использовал?.... Хм. Пока нет времени на проверку. Чтобы точно диагностировать, просьба Антон -- включай в вывод метку сборки и дату у компилятора. |
Понял, буду добавлять дату в вывод. Хорошо, когда будет время, тогда и проверишь. Торопиться некуда. |
walera@walera-lin:~/coding/gowork/src/github.com/prospero78/obGraph$ make run.app
Compiler "../src/Main.ob07" linux64exe -out "../bin/main"
Akron Oberon Compiler v1.43 (64-bit)
Copyright (c) 2018-2020, Anton Krotov
--------------------------------------------
file /home/walera/coding/gowork/src/github.com/prospero78/obGraph/lib/Linux64/RTL.ob07 not found
make: *** [Makefile:2: run.app] Ошибка 1 Хм... Похоже, ищет библиотеки в каталоге проекта. |
Ладно, вечером посмотрю. |
Работает. Я изменил Makefile из твоего репозитория на такой (указал относительный путь к новому компилятору): run.app: Компилируется и запускается, только терминал пишет: ./Makefile1: строка 1: run.app:: команда не найдена Но это не влияет на работу компилятора. |
С явным указанием относительных путей работает. (* И с самого начала так работало *) |
Раньше не так работало. Раньше, относительный путь к проекту задавался только относительно компилятора. Теперь -- относительно рабочего (текущего) каталога. Компилятор должен знать свое расположение, чтобы найти папку /lib/. Получает он эту информацию из нулевого параметра командной строки. Как еще передать ему собственное расположение -- я не знаю. Пока же, чтобы не таскать компилятор в каждый проект, можно попробовать положить в проект два системных модуля API и RTL для соответствующей ОС. Компилятор сначала ищет модули в папке проекта и только потом в /lib/. Правда, если потребуется скомпилировать проект для другой ОС, то придется заменить API и RTL в проекте. Или сделать универсальные API/RTL с применением условной компиляции. |
Эмм... Есть же команда |
Так и сделано, только текущий каталог # каталог компилятора. |
Может, добавить экспорт переменной окружения для библиотек? И если её нет, выдавать предупреждение? |
Над этим надо подумать. Еще не приходилось работать с переменными окружения. |
Когда занимаешься локальной отладкой -- очень удобно программу после запуска конфигурировать. На сервере нет переменной окружения -- значит куча кода автоматом игнорируется. Я переменные окружения задаю в |
Я сделал импорт с указанием пути. Только через "IN". Так оказалось проще. |
Да, относительный импорт работает. |
Хм. Что-то сломалось. compiling (14) Main (SYSTEM)
error (66) (101:28) incompatible parameter
file: /home/walera/coding/gowork/src/github.com/prospero78/obGraph/src/Main.ob07
make: *** [Makefile:3: run.app] Ошибка 1 Вроде, ничего не изменилось. Но что-то сломалось. Код (в сущности) не менял. Глянь, что случилось? Я ошибок не вижу, параметры соответствуют, экспорт не менялся. |
Чтобы работало, надо просто поставить расширение файлов модулей. вместо так: Но поведение странное, надо разбираться. |
Исправил везде расширения, собралось правильно. Чтобы поведение был правильное -- при импорте надо проверять принудительно расширение файлов. |
Исправлено. Теперь, если расширение не указано, будет ошибка: "файл не найден". |
walera@walera-lin:~/coding/gowork/src/github.com/prospero78/obGraph$ SelfLinux64.sh Compiler index out of range module: HOST line: 83 /home/walera/bin/SelfLinux64.sh: строка 2: @pause: команда не найдена
The text was updated successfully, but these errors were encountered: