Часть третья. Быть или не быть?Оглавление'Быть или не быть?' - сказал он как то не уверенно.В
первой и
второй части я подробно описал компилятор и линкёр Оберона,
пришло время активных действий. Давайте попробуем сделать пустое приложение скомпилировать
и слинковать его.
Создаем в нашей корневой папке пару пустых файлов
Program1.mod и
Program1.Link что бы получилось нечто похожее

открываем
Program1.mod и вбиваем код
Код: "OBERON"
MODULE Program1;
BEGIN
END Program1.
Это пустое приложение которое мы скомпилируем изменив и запустив файл CompileAndLink.bat
Код: "LINK"
Bin\O2ETHCLC.EXE Program1.mod
pause
Ну что компилируем запускаем и видим примерно следующее

то есть компиляция прошла нормально, и у нас появился файлик
Program1.ObjЭто объектный файл для Оберон компилятора (
не надо путать с Windows coff или ofm файлами)
который мы сейчас и попытаемся слинковать.
Так как не импортируемых модулей не экспорта у нас нет, то в
Program1.Link вбиваем код
с единственным модулем
Program1Код: "LINK"
PROGRAM Project
SUBSYSTEM CUI
IMGVERSION 2.4
HEAPSIZE 100000H
MODULES
Program1
и сохраняем файл.
Открываем наш системный сценарий CompileAndLink.bat и меняем код на следующий
Код: "BAT"
Bin\O2ETHCLL.EXE Program1.Link
pause
Пробуем слинковать всё наше хозяйство! И............................

У кого не появилось данной картинки, тот видимо что то в этой жизни сделал правильно,
но в коде ошибся.
Жесткий облом в виде нецензурного выражения операционной системы.!!!
Ну что же, на этом бы можно было и закончить если бы не одно но!
Вспомним что же такое Оберон компилятор.
Оберон компилятор - это компилятор, в
котором всё венесено в модули (даже RTL и сборщик мусора),
а раз так, то естесственно без RTL с грехом пополам (хотя почему?) он работать должен, а вот без сборщика нет!!!
И где же брать такое чудо, как сборщик мусора?
Так в исходниках компилятора тут
Оберон 2 и называется он
Kernel.mod.
Не буду вас мучить кучей файлов которые нужны для его работы, просто приаттачу сюда файлик скомпилированый,
который не требует для себя дополнительных файлов вроде
Kernel32.mod.
Вложение:
Комментарий к файлу: Сборщик мусора (скомпилированый модуль)
Kernel.zip [6.24 КБ]
Скачиваний: 1817
Теперь для корректной работы папочка наша выглядит вот так

И нам осталось прописать опции линкёра (ведь сборщик мусора импортирует же какие то функции) и компилятора в
нашем
Link и
BAT файле а так же (для надёжности, потом мы всё это пропишем в другом файле)
написать код запуска сборшщика в пустом приложении
Код: "OBERON"
MODULE Program1;
IMPORT
Kernel;
BEGIN
IF Kernel.call = 0 THEN
INC(Kernel.call);
Kernel.Init();
ELSIF Kernel.ExitProc # NIL THEN
Kernel.Shutdown(0);
END;
END Program1.
ВНИМАНИЕ!!! ЭТОТ Link ФАЙЛ ВКЛЮЧАЕТ В СЕБЯ RTL СБОРЩИКА, ПОЭТОМУ ПОСЛЕДУЮЩИЕ ПРОЕКТЫ
БУДУТ ТОЛЬКО ДОПОЛНЯТСЯ, БЕЗ ПОЛЕЙ ИМПОРТА НИ ОДНО ПРИЛОЖЕНИЕ НЕ БУДЕТ РАБОТАТЬ КОРРЕКТНО!Код: "LINK"
PROGRAM Project
SUBSYSTEM CUI
IMGVERSION 2.4
HEAPSIZE 100000H
MODULES
Kernel, Program1
IMPORTS
Kernel.bootHeapAdr = HeapAdr,
Kernel.DeleteCriticalSection = KERNEL32.DeleteCriticalSection,
Kernel.EnterCriticalSection = KERNEL32.EnterCriticalSection,
Kernel.InitializeCriticalSection = KERNEL32.InitializeCriticalSection,
Kernel.LeaveCriticalSection = KERNEL32.LeaveCriticalSection,
Kernel.GetModuleHandle = KERNEL32.GetModuleHandleA,
Kernel.getProcAddress = KERNEL32.GetProcAddress,
Kernel.GetVersion = KERNEL32.GetVersion,
Kernel.LoadLibrary = KERNEL32.LoadLibraryA,
Kernel.ExitProcess = KERNEL32.ExitProcess,
Kernel.VirtualAlloc = KERNEL32.VirtualAlloc,
Kernel.VirtualFree = KERNEL32.VirtualFree,
Kernel.TryEnterCriticalSection = KERNEL32.TryEnterCriticalSection
Код: "BAT"
Bin\O2ETHCLC.EXE Program1.mod
Bin\O2ETHCLL.EXE Program1.Link
pause
Запускаем
CompileAndLink.bat и о чудо!!!

Все скомпилировалось и слинковалось без вопросов и в папке появился файлик Project.EXE именно такой, каким
мы его и обозвали в
Program1.Link файле в поле
PROGRAMПри запуске он естественно ничего не покажет, может просто моргнёт на секунду консольное окно
Windows, и завершится, и что самое главное, не останется висеть в диспетчере задач освободив память!
Ну на сегодня пожалуй всё, а в
следующей части мы напишим свою консоль с вводом/выводом строк, чисел
и т.д.
Вложение:
Комментарий к файлу: Сборщик мусора (скомпилированый модуль)
Kernel.zip [6.24 КБ]
Скачиваний: 1817