OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Понедельник, 18 Февраль, 2019 04:53

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: CPCC - сборка исполняемого файла
СообщениеДобавлено: Воскресенье, 08 Май, 2016 02:25 
Аватара пользователя

Зарегистрирован: Среда, 22 Апрель, 2015 23:51
Сообщения: 119
Откуда: г. Рига, Латвийская ССР
Я решил опробовать CPCC (консольный компилятор Компонентного Паскаля для Линукса, подсистема Блэкбокса).
https://sourceforge.net/projects/cp-dev/
Тут я расписываю всё очень подробно в надежде на то, что кому-то в будущем эта писанина поможет разобраться, как пользоваться CPCC. Документация, увы, практически отсутствует.

Долго пытался понять, почему не компилируется проект с тремя файлами, один из которых - внешний модуль. Оказалось, что достаточно этот внешний модуль просто включить в список IMPORT (в другом модуле, где это нужно), а я ещё дописывал его в список LinkedMods в prj-файле:
Код:
LinkedMods=Kernel$+ Math ... Init Out GraphSdl GraphLib GraphTest#
(GraphSdl у меня - это внешний модуль.)

Чтобы скомпилировать этот компонент из трёх файлов, мне потребовалось три PRJ-файла. Иначе оно ругается: "Error #152: symbol file of imported module not found". Порядок сборки такой:
Код:
./cpcc GraphSdl.prj # Тут оно ругается в конце, но без этой строчки никак.
./cpcc GraphLib.prj # Создаётся лишний файл - libgraphlib.so, но без этого тоже никак.
./cpcc GraphTest.prj
Прилагаю к сообщению все 6 файлов (3 cp и 3 prj). Вообще, всё это ненормально. Может, доделаем компилятор-то? Такой компилятор, но доведённый до ума, оказал бы незаменимую помощь при продвижении Оберона в массы.

В итоге, я смог без каких либо дополнительных проблем из линуксовской консоли собрать динамическую библиотеку (SO-файл), экспортирующую процедуру Do модуля GraphTest (кстати, она так и называется - "Do", а не, например, "GraphTest_Do", как было бы в VOC или OO2C, но это, пожалуй, хорошо). Список экспортируемых SO-файлом процедур можно получить командой:
Код:
nm -d libgraphtest.so

Затем я создал файл "prog.c":
Код:
extern void Do();
int main() {
  Do();
  return 0;
}
и скомпилировал его командой:
Код:
gcc -o prog -lgraphtest -L. prog.c
(-lgraphtest добавляет файл libgraphtest.so, а -L. указывает, что этот файл следует искать также и в текущем каталоге.)

Появился исполняемый файл prog, который замечательно работает, но только запускать его надо вот так:
Код:
env LD_LIBRARY_PATH=. ./prog
или вот так:
Код:
export LD_LIBRARY_PATH=.
./prog
иначе он ругается:
Код:
./prog: error while loading shared libraries: libgraphtest.so: cannot open shared object file: No such file or directory
что очень тупо :)

Дальше я сделал следующее: в модуль GraphTest (Graph/Mod/Test.cp) добавил секцию BEGIN:
Код:
MODULE GraphTest;
  ...
BEGIN
  Do
END GraphTest.
а из файла "prog.c" убрал всё лишнее, оставив только:
Код:
int main() {
  return 0;
}

Это работает, то есть после точно такой же сборки исполняемого файла через GCC программа работает также. Получается, что SO-файл сам запускает процедуру Do внутри себя.

Внимание вопрос. Как сделать так, чтобы SO-файл можно было запускать непосредственно? Или как сделать так, чтобы получался не SO, а ".a"-файл, то есть статическая библиотека?
Или ещё один вариант вопроса: как дописать ElfLinker или LinLinker или что-то ещё и где его взять? Вроде бы, линуксовский SO-файл (имеющий формат ELF) не очень отличается от исполняемого бинарника формата ELF. Пока искал в интернете информацию по этому поводу, с удивлением обнаружил, что некоторые SO-файлы можно даже запускать из консоли после chmod +x и тогда запускается процедура с определённым названием, что-то вроде __ldd_main...


Вложения:
Комментарий к файлу: Компонент Graph (модули GraphSdl, GraphLib и GraphTest) набор из трёх PRJ-файлов для компиляции данного компонента под Линуксом с помощью CPCC
CPCC_Test.zip [13.29 КБ]
Скачиваний: 94
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CPCC - сборка исполняемого файла
СообщениеДобавлено: Воскресенье, 08 Май, 2016 05:02 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2253
LinLinker есть в Freenix сборке Блэкбокса.
http://oberoncore.ru/projects/bb-freenix

Вот прикладываю мой пример кросскомпиляции. Я хотел его "причесать" перед тем как выкладывать, но раз тема актуальна, то выкладываю как есть.

Смотрите файл ObxIcosphere, там в конце файла все команды для компиляции.

В системе должны стоять пакеты libsdl2-dev libsdl2-ttf-dev либо в 64-битной системе libsdl2-dev:i386 libsdl2-ttf-dev:i386


Вложения:
SDL.zip [1.83 МБ]
Скачиваний: 101
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CPCC - сборка исполняемого файла
СообщениеДобавлено: Воскресенье, 08 Май, 2016 09:49 
Аватара пользователя

Зарегистрирован: Воскресенье, 12 Апрель, 2015 18:12
Сообщения: 1104
Откуда: СССР v2.0 rc 1
Для запуска как исполняемого файла я бы написал на Си заглушку-вызов *.so, а сам *.so не компилировать ,а оставить в виде объектного файла с предопределённой процедурой входа (обязательной). Вот только непонятно, как эту самую объектную сброку сохранить, т. к. компилятор КП однопроходный. Можно, конечно, Mono использовать, но это уже несколько не то.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CPCC - сборка исполняемого файла
СообщениеДобавлено: Воскресенье, 08 Май, 2016 12:03 
Аватара пользователя

Зарегистрирован: Среда, 22 Апрель, 2015 23:51
Сообщения: 119
Откуда: г. Рига, Латвийская ССР
Иван Денисов писал(а):
LinLinker есть в Freenix сборке Блэкбокса.
Сейчас посмотрю. А почему это "кросскомпиляция"? Разве компиляция происходит не на самом Линуксе?

prospero78 писал(а):
Для запуска как исполняемого файла я бы написал на Си заглушку-вызов *.so...
Так ведь читайте дальше, я так и сделал. Но это только временное "решение". Кстати, SO-файл вроде как нельзя скомпилировать (когда он уже скомпилирован), то есть нельзя его переделать в статическую библиотеку, нельзя переделать в исполняемый файл, во всяком случае GCC этого не умеет, а в интернете советуют дизассемблировать SO-файл и потом пересобрать.
Я немного не понял, зачем нам мог бы понадобиться Mono и как мешает однопроходность компилятора в данном случае?


Последний раз редактировалось kekc_leader Воскресенье, 08 Май, 2016 12:52, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CPCC - сборка исполняемого файла
СообщениеДобавлено: Воскресенье, 08 Май, 2016 12:14 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2253
kekc_leader писал(а):
Иван Денисов писал(а):
LinLinker есть в Freenix сборке Блэкбокса.
Сейчас посмотрю. А почему это "кросскомпиляция"? Разве компиляция происходит не на самом Линуксе?

На винде он тоже будет работать, я пробовал. Только надо закомментировать Libc. Получится кросскомпиляция. Ну а сейчас я использую LinLinker на Linux версии, да.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CPCC - сборка исполняемого файла
СообщениеДобавлено: Воскресенье, 08 Май, 2016 13:34 
Аватара пользователя

Зарегистрирован: Среда, 22 Апрель, 2015 23:51
Сообщения: 119
Откуда: г. Рига, Латвийская ССР
Иван Денисов писал(а):
Вот прикладываю мой пример кросскомпиляции.

Блин, классная программа! Файл icosphere запустился без проблем (у меня Дебиан, i686), попробовал ради интереса запустить Icosphere.exe через Wine, появилось пустое окошко программы и вылетел Trap #038 (связанный с OpenFont).

Вопрос:
А почему каталог Obx находится в каталоге Sdl2/Mod?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CPCC - сборка исполняемого файла
СообщениеДобавлено: Воскресенье, 08 Май, 2016 15:58 
Аватара пользователя

Зарегистрирован: Воскресенье, 12 Апрель, 2015 18:12
Сообщения: 1104
Откуда: СССР v2.0 rc 1
Mono полезен тем, что под ним, теоретически, должен взлететь Garden Point. На сколько я понимаю, компиляция идёт средствами Mono/Net, а не встроенным компилятором, как в КП. А однопроходность КП/ББ мешает тем, что сразу даёт кодовые файлы, и символьные, как "вещь в себе". Уже ни к чему не подцепить.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CPCC - сборка исполняемого файла
СообщениеДобавлено: Воскресенье, 08 Май, 2016 17:14 
Аватара пользователя

Зарегистрирован: Среда, 22 Апрель, 2015 23:51
Сообщения: 119
Откуда: г. Рига, Латвийская ССР
prospero78 писал(а):
А однопроходность КП/ББ мешает тем, что сразу даёт кодовые файлы, и символьные, как "вещь в себе". Уже ни к чему не подцепить.
В книге «Построение компиляторов» Вирт пишет, что для перенацеливания компилятора достаточно поменять модуль OSG. В Блэкбоксе он называется DevCPV486 и подлючен он вот так:
Код:
IMPORT ... DevCPV := DevCPV486;

То есть перенацеливание по замыслу происходит простой заменой DevCPV486 на другой модуль.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CPCC - сборка исполняемого файла
СообщениеДобавлено: Воскресенье, 08 Май, 2016 19:22 
Аватара пользователя

Зарегистрирован: Среда, 22 Апрель, 2015 23:51
Сообщения: 119
Откуда: г. Рига, Латвийская ССР
Код:
^Q DevCompiler.CompileThis GraphSdl
^Q DevCompiler.CompileThis GraphLib
^Q DevCompiler.CompileThis GraphTest

^Q GraphTest.Do     <--- это работает

^Q LinLinker.Link graphtest := Kernel$+ Math Files Strings Log Dialog LinLog Services GraphLib Fonts Ports StringsUtf GraphTest

Из последней строчки я убрал GraphSdl из списка, потому что LinLinker говорил, что не может найти кодовый файл Graph/Code/Sdl.ocf (видимо, потому что это внешний модуль и кодовый файл при его компиляции не создаётся).
Не уверен, что мне нужны все эти модули, но я их не убирал. Исполняемый файл graphtest создаётся. но при его запуске выдаёт на стандартный вывод следующее:
Код:
invalid import list
Incorrect module: GraphLib
Но модуль GraphTest использует GraphLib, и в список я его добавил. Что я делаю не так?

Ещё два сторонних вопроса:
1) Можно сам LinLinker скомпилировать в отдельный исполняемый файл и запускать из консоли? Или как-то его использовать через CPCC?
2) Как с клавиатуры поставить этот символ в конце списка? В начале я знаю - CTRL+Q, а в конце маленький треугольничек как ставить?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CPCC - сборка исполняемого файла
СообщениеДобавлено: Воскресенье, 08 Май, 2016 20:30 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2253
Забыли Out прилинковать, но вы его лучше замените на Log. Так как у Out "плохие" зависимости от каркаса. Его лучше вообще не использовать при работе с Блэкбоксом.
Для дреугольничка нету комбинации клавиш и пункта меню. Я его копирую, но вместо него можно смело ставить другой коммандер.

Еще плохо, что мы в этой ветке обсуждаем эти вещи. Получается оффтопик, нас забанят :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CPCC - сборка исполняемого файла
СообщениеДобавлено: Воскресенье, 08 Май, 2016 20:36 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2253
kekc_leader писал(а):
1) Можно сам LinLinker скомпилировать в отдельный исполняемый файл и запускать из консоли? Или как-то его использовать через CPCC?

Вот тут есть как собрать консольный интерпретатор для Винды, который работает в том числе как компилятор.
https://www.youtube.com/watch?v=3zFBDRwUxdE

В линуксе проще
Код:
git clone http://gitlab.molpit.org/blackbox/freenix.git bbcb
cd bbcb/BlackBox
./switch-target `uname -s` Interp
./build
echo "DevCompiler.CompileThis LinLinker LinLog" | ./blackboxc
echo "LinLinker.Link graphtest := Kernel$+ Math Files Strings Log Dialog LinLog Services GraphLib Fonts Ports GraphTest" | ./blackboxc


Последний раз редактировалось Иван Денисов Воскресенье, 08 Май, 2016 21:07, всего редактировалось 3 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CPCC - сборка исполняемого файла
СообщениеДобавлено: Воскресенье, 08 Май, 2016 20:40 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2291
Откуда: Россия, Санкт-Петербург
Иван Денисов писал(а):
Для дреугольничка нету комбинации клавиш и пункта меню.
А раньше (v1.5) был пункт меню в Tools:
"Insert EndCommander" "*Q" "DevCommanders.DepositEnd; StdCmds.PasteView" "StdCmds.PasteViewGuard"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CPCC - сборка исполняемого файла
СообщениеДобавлено: Воскресенье, 08 Май, 2016 23:17 
Аватара пользователя

Зарегистрирован: Среда, 22 Апрель, 2015 23:51
Сообщения: 119
Откуда: г. Рига, Латвийская ССР
Иван Денисов писал(а):
Забыли Out прилинковать
Спасибо, прилинкую. Странно, что сообщение об ошибке такое. Или так и задумано? Она жалуется, что не хватает какого-то модуля, но не говорит какого, а говорит, где его не хватает ("в каком модуле")?

Иван Денисов писал(а):
Еще плохо, что мы в этой ветке обсуждаем эти вещи. Получается оффтопик, нас забанят :)
Хаха, действительно могут забанить :D . Для такого незначительного вопроса постыдился открывать отдельную тему.

Немного запутано получается. Freenix, выходит, тоже работает через консоль. Есть какая-то разница между ним и CPCC в функциональном плане? CPCC - это просто более старый проект или он в чём-то лучше?
Код:
echo "DevCompiler.CompileThis LinLinker LinLog" | ./blackboxc

Чем исполняемый файл blackboxc отличается от исполняемого файла blackbox? Оба запускаются вроде бы одинаково. Ещё есть файлы ./run-BlackBox и ./run-Blackbox-2 . Вижу, что в run-Blackbox прописываются пути. Почему при консольной компиляции эти пути не нужны? Я извиняюсь, если в документации уже есть ответы на эти вопросы, но я не нашёл.

Ещё есть сторонний вопрос про Блэкбокс в целом что ли. Кажется, я такое уже видел на этом форуме, но найти не получилось, поэтому не хочу открывать новую тему.
Как в Блэкбоксе (в т. ч. на Линуксе) сделать, чтобы при загрузке Блэкбокса открывались какие-то определённые документы? Или как сделать, чтобы он восстанавливал закрытые окна при следующей загрузке?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CPCC - сборка исполняемого файла
СообщениеДобавлено: Понедельник, 09 Май, 2016 00:47 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4210
Откуда: Россия, Орёл
kekc_leader писал(а):
Ещё есть сторонний вопрос про Блэкбокс в целом что ли. Кажется, я такое уже видел на этом форуме, но найти не получилось, поэтому не хочу открывать новую тему.
Как в Блэкбоксе (в т. ч. на Линуксе) сделать, чтобы при загрузке Блэкбокса открывались какие-то определённые документы? Или как сделать, чтобы он восстанавливал закрытые окна при следующей загрузке?


http://oberoncore.ru/bbcc/subs/i21sys/start

Конкретно i21sysDesktop оттуда можно посмотреть. Но есть и другие способы, если нужно всегда что-то конкретное открывать. Сейчас народ подскажет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CPCC - сборка исполняемого файла
СообщениеДобавлено: Вторник, 10 Май, 2016 04:37 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2253
kekc_leader писал(а):
Чем исполняемый файл blackboxc отличается от исполняемого файла blackbox? Оба запускаются вроде бы одинаково. Ещё есть файлы ./run-BlackBox и ./run-Blackbox-2 . Вижу, что в run-Blackbox прописываются пути. Почему при консольной компиляции эти пути не нужны? Я извиняюсь, если в документации уже есть ответы на эти вопросы, но я не нашёл.
Отвечаю в другой теме: viewtopic.php?f=134&t=5700#p96557


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CPCC - сборка исполняемого файла
СообщениеДобавлено: Понедельник, 16 Май, 2016 02:44 
Аватара пользователя

Зарегистрирован: Среда, 22 Апрель, 2015 23:51
Сообщения: 119
Откуда: г. Рига, Латвийская ССР
Спасибо за ответы.

У меня почти получилось сделать то, что я хотел. odc-файлы компилируются и собираются в исполняемый файл (на Линуксе).
В отличие от Freenix'а, CPCC компилирует cp-файлы, а не odc. Это исходные коды программ на Компонентном Паскале, но в сыром текстовом формате. Мне как раз это и нужно, а в Freenix'е этого нет. Я порылся немного в файлах (Dev/Mod/Compile.odc в Freenix и src/CompilerLib/CDev/Mod/Compiler.odc в CPCC. ) и обнаружил, что они очень похожи.

В отличие от Freenix'а, в модуле CDevCompiler (это в CPCC) есть процедура CompileFile:
Код:
PROCEDURE CompileFile* (IN path: TString; OUT IOres: INTEGER): BOOLEAN;
Она открывает заданный файл, подключает к нему считыватель (reader) и передаёт его процедуре Compile, которая почти аналогична процедуре Module в Freenix (см. сравнение на приложенном снимке). Видно, что делают они по сути одно и то же, но при этом сильно различаются по мелочам.

1) Есть ли какой-то более-менее простой способ заставить Freenix компилировать модули из простых текстовых файлов?
2) Можно ли по-простому переконвертировать TXT-файл в ODC-файл? Мне приходит на ум либо использовать какой-то модуль, но выглядит это довольно запутанно (я не знаю, как потом этот файл сохранить и не будет ли этот модуль требовать какой-нибудь там подсистемы Views, которой нет в Freenix'е, и она мне и не нужна), либо сцеплять TXT-файл с двумя бинарными заглушками: одна в начале, другая в конце, чтобы получить простой ODC-файл. (Поменять переносы строк - не проблема.) А может быть, можно как-то иначе?


Вложения:
Комментарий к файлу: Сравнение модулей из CPCC и Freenix
devcompiler_cpcc_freenix.png
devcompiler_cpcc_freenix.png [ 31.36 КБ | Просмотров: 6502 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CPCC - сборка исполняемого файла
СообщениеДобавлено: Понедельник, 16 Май, 2016 05:14 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2253
kekc_leader писал(а):
1) Есть ли какой-то более-менее простой способ заставить Freenix компилировать модули из простых текстовых файлов??

Да, конечно! Есть ведь ConsCompiler
Код:
echo ConsCompiler.Compile('Lin/Mod', 'Dl.txt') | blackboxc


Как скомпилировать множество файлов разом смотрите пример:
http://gitlab.molpit.org/blackbox/freen ... terp/build

Недавно еще я поправил описание первого примера, тут как раз объясняется про ConsCompiler
http://gitlab.molpit.org/blackbox/freen ... es/console


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CPCC - сборка исполняемого файла
СообщениеДобавлено: Понедельник, 16 Май, 2016 11:13 
Аватара пользователя

Зарегистрирован: Среда, 22 Апрель, 2015 23:51
Сообщения: 119
Откуда: г. Рига, Латвийская ССР
Здорово! Буду проверять.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CPCC - сборка исполняемого файла
СообщениеДобавлено: Понедельник, 16 Май, 2016 21:23 
Аватара пользователя

Зарегистрирован: Среда, 22 Апрель, 2015 23:51
Сообщения: 119
Откуда: г. Рига, Латвийская ССР
Скомпилировать получилось.
Свою тестовую программку на SDL я скомпилировал почти без проблем, только пришлось позаниматься перебором вариантов списка модулей для «LinLinker.Link».
В итоге получилось так:
Код:
echo "ConsCompiler.Compile('Graph/Mod', 'Sdl.cp')" | ./blackboxc
echo "ConsCompiler.Compile('Graph/Mod', 'Lib.cp')" | ./blackboxc
echo "ConsCompiler.Compile('Graph/Mod', 'Test.cp')" | ./blackboxc
echo "LinLinker.Link grtest := Kernel$+ Math Files Strings Log GraphLib GraphTest" | ./blackboxc

Получившаяся программа запускается и работает как надо и корректно завершается, только вот код выхода выдаёт 1, а не 0. С чем это может быть связано?

Ещё одна проблема - если в программе использовать модуль Log, то на консоль ничего не выводится.
Код:
Log.String('Hello?'); Log.Ln

В примере я вижу, что там подключается ещё и ConsLog, но когда я его подключаю, компиляция перестаёт компоноваться, даже если добавить ConsLog в список используемых модулей. Ошибка при запуске неправильно скомпонованной программы:
Код:
invalid import list
Incorrect module: ConsLog

Какие ещё модули надо подключить, чтобы снова заработала компоновка?
И в общем случае, как можно узнать какие модули нужно подключать?

Прикладываю к сообщению весь каталог с Freenix'ом, вместе с компонентом Graph. В архиве также находится скомпонованый файл grtest. Для перекомпиляции и перекомпоновки можно запустить баш-скрипт COMPILE_GRAPHTEST. На 46-й строке файла «Graph/Mod/Test.cp» стоит попытка вывода текста на консоль.


Вложения:
Комментарий к файлу: Опытная минисброка Freenix + GraphTest
BB.zip [4.84 МБ]
Скачиваний: 85
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CPCC - сборка исполняемого файла
СообщениеДобавлено: Понедельник, 16 Май, 2016 21:56 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2253
ConsLog имеет достаточно много зависимостей, их легко увидеть в секции импорта модуля. Для простых приложений используйте LinLog. В том варианте, который у вас сейчас, он требует явной инициализации через вызов LinLog.Open в вашем модуле. Либо добавьте ему Open, как показано ниже, тогда достаточно будет его слинковать, он сам себя инициализирует.
Код:
   PROCEDURE Open*;
   BEGIN
      Log.SetHook(hook);
      Dialog.SetShowHook(showHook)
   END Open;
   
BEGIN
   NEW(showHook);
   NEW(hook);
   Open
END LinLog.


Автоматические построители зависимостей - вещь коварная, так как часто поведение приложения зависит именно от того, какие модули слинкованы.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2019, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB