OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 29 Март, 2024 02:47

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




Начать новую тему Ответить на тему  [ Сообщений: 15 ] 
Автор Сообщение
 Заголовок сообщения: Еще раз про линкер.
СообщениеДобавлено: Понедельник, 03 Апрель, 2006 12:10 

Зарегистрирован: Понедельник, 03 Апрель, 2006 11:49
Сообщения: 4
Всем привет!
Неделю назад узнал о такой системе как ББ. Тут же скачал , установил , русифицировал. Прочитал проктически всю документацию , как по самому языку , так и по среде . Сам являюсь поклонником Модулы-2 (TopSpeed 3.02,XDS) ,и вот решил занятся ББ вплотную так как вижу ,что довольно перспективная среда .
Решил скомпоновать ехе для простейшего модуля из примеров к обучению и был немного озадачен.
Модуль:
Код:
MODULE new7;
IMPORT Converters, Files, Views, TextModels, TextMappers, TextViews;

   PROCEDURE Do*;
      VAR loc: Files.Locator; name: Files.Name; conv: Converters.Converter;
         v: Views.View; t: TextModels.Model; f: TextMappers.Formatter;
         res: INTEGER;
   BEGIN
      loc := NIL; name := ""; conv := NIL;
      v := Views.Old(Views.ask, loc, name, conv);
      IF (v # NIL) & (v IS TextViews.View) THEN
         t := v(TextViews.View).ThisModel();
         f.ConnectTo(t);
         f.SetPos(t.Length());
         f.WriteString("appendix");
         Views.Register(v, Views.ask, loc, name, conv, res)
      END
   END Do;
END new7.


Насколько я понял модули надо добавлять вручную и вот к чему я пришел :
Код:
DevLinker.LinkExe
ObxHello7.exe := National Kernel Meta Files Dialog Math Strings Stores Converters Log Services Fonts Ports Sequencers Models Views Controllers Properties Mechanisms Containers TextModels TextMappers Dates Printers Printing  TextRulers TextSetters TextViews TextSetters ObxHello7.Do$ ~


однако выдает ошибку: no Kernel


Понимаю что ответ прост до безобразия , но надеюсь что ктонибудь поможет разобраться на ранних этапах изучения . Сам прошел и огонь и воду десятков обласных республиканских олимпиад , и думаю что буду полезен в дальнейшем для развития и расширения новых простор БлэйкБокса =))).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Понедельник, 03 Апрель, 2006 13:43 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Здравствуйте! Рады видеть вас на нашем форуме :-)

С линковкой в ББ немного сложнее, чем в других средах - по сути-то своей среда ориентирована на динамическую линковку. В большинстве случаев статическую линковку всего проекта не делают, просто убирают ненужные подсистемы, пересобирают BlackBox.exe с нужной иконкой, переименовывают его и переписывают конфигурационную стартовую процедуру Config.Setup. Если же нужно собрать монолитный exe, то нужно внимательно разобраться с модулем DevLinker.
Почитайте следующие материалы:
I. Документация
1) Руководства пользователя (самая левая колонка в справке) -> Подсистема Dev (в частности, "Развертывание")
2) Документацию модуля DevLinker
3) Особенности платформы (Platform-Specific-Issues) - Компоновщик BlackBox, Этапы загрузки BlackBox
II. На нашем форуме:
http://blackbox.metasystems.ru/forum/vi ... .php?t=132 - прочитайте внимательно до конца.

Ну и еще: на сайте Информатики-21 http://www.inr.ac.ru/~info21 есть так называемая "олимпиадная" подсистема, которая позволяет собирать минимальные безгуевые экзешники, рабоатющие с файлами input.txt/ouptup.txt в стиле TurboPascal.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Четверг, 06 Апрель, 2006 01:30 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Наткнулся, кстати говоря, на еще одну полезную штуку.

Можно составить список из своих модулей (разделяя пробелами), выделить его и нажать Info->Create Tool. Будет создан документ, содержащий команды для их компиляции в правильном порядке, для линковки минимального exe-шника и для упаковки в него всего run-time.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Четверг, 06 Апрель, 2006 06:05 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 10:37
Сообщения: 875
Откуда: Россия, Владивосток
Вот только команду для линковки в правильном порядке он не производит :( Да и команда компиляции у него неправильная (National нет). Но вот действительно полезная штука - команда для выгрузки.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Четверг, 06 Апрель, 2006 07:15 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 21:41
Сообщения: 1030
Илья Ермаков писал(а):
Рады видеть вас на нашем форуме :-)
С линковкой в ББ немного сложнее, чем в других средах - по сути-то своей среда ориентирована на динамическую линковку.
Неплохо было бы иметь возможность указывать модуль, выполняющий функции модуля System.Init в слинкованном приложении через переменную окружения ("INIT" например). Чуть меньше путаницы будет. Трудно сказать относится ли это предложение к сути системы. По-моему, такое заявление достаточно сильное. Скорее типичное расширение.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Четверг, 06 Апрель, 2006 08:08 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 10:37
Сообщения: 875
Откуда: Россия, Владивосток
А зачем собственно? Перед линковкой компилируете нужный модуль (главное чтоб назывался Init), а после линковки убиваете полученный кодовый файл. Или имеется в виду возможность в слинкованном приложении подключать различные варианты Init?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Четверг, 06 Апрель, 2006 14:54 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 21:41
Сообщения: 1030
Когда я удаляю файлы у меня нет цели их использовать в дальнейшем. Здесь же случай другой. Также плюс в том, что сохраняется возможность одновременной работы стандартного BlackBox. Пока достаточно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Четверг, 06 Апрель, 2006 15:36 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Цитата:
Также плюс в том, что сохраняется возможность одновременной работы стандартного BlackBox.

Дык для этого существует так называемый "серверный запуск", с параметром /USE (см. левую нижнюю колонку документации). У меня иногода до 6-7 профилей бывает, на каждый свой ярлык - и вперед...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Четверг, 06 Апрель, 2006 22:07 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 21:41
Сообщения: 1030
Илья Ермаков писал(а):
Цитата:
Также плюс в том, что сохраняется возможность одновременной работы стандартного BlackBox.

Дык для этого существует так называемый "серверный запуск", с параметром /USE. У меня иногда до 6-7 профилей ...
Уже неплохо. Но когда Вам понадобится изменить подключаемый модуль легче закомментировать одну строку в описании конфигурации, чем создать новый профиль.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Четверг, 06 Апрель, 2006 23:40 

Зарегистрирован: Понедельник, 03 Апрель, 2006 11:49
Сообщения: 4
Илья Ермаков писал(а):
Здравствуйте! Рады видеть вас на нашем форуме :-)

С линковкой в ББ немного сложнее, чем в других средах - по сути-то своей среда ориентирована на динамическую линковку. В большинстве случаев статическую линковку всего проекта не делают, просто убирают ненужные подсистемы, пересобирают BlackBox.exe с нужной иконкой, переименовывают его и переписывают конфигурационную стартовую процедуру Config.Setup. Если же нужно собрать монолитный exe, то нужно внимательно разобраться с модулем DevLinker.
Почитайте следующие материалы:
I. Документация
1) Руководства пользователя (самая левая колонка в справке) -> Подсистема Dev (в частности, "Развертывание")
2) Документацию модуля DevLinker
3) Особенности платформы (Platform-Specific-Issues) - Компоновщик BlackBox, Этапы загрузки BlackBox
II. На нашем форуме:
http://blackbox.metasystems.ru/forum/vi ... .php?t=132 - прочитайте внимательно до конца.

Ну и еще: на сайте Информатики-21 http://www.inr.ac.ru/~info21 есть так называемая "олимпиадная" подсистема, которая позволяет собирать минимальные безгуевые экзешники, рабоатющие с файлами input.txt/ouptup.txt в стиле TurboPascal.


Большое спасибо за ответ, многое стало ясным :) .
В общем и целом я пошел по более легкому пути и попытался собрать среду заново используя Info->CreateTool. Во время сборки предполагалось ,что все меню будет состоять из одного пункта , а все лишнее удалится . Т.е. дабы "сильно не мучаться" на этапе упаковки путь к меню указал свой т.е. не System/Rsrc/Menus.odc, а к примеру MyMenu/Menus.odc. Попытка оказалась не удачной. При запуске из другой дериктории "новая среда" открывалась с ошибкой файл меню не найден . Сколько я не мучался ничего не получалось , единственный вариант был поменять меню наживую ,тогда собиралось все прекрасно.Вот такая вот странность =))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 07 Апрель, 2006 08:50 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Цитата:
Т.е. дабы "сильно не мучаться" на этапе упаковки путь к меню указал свой т.е. не System/Rsrc/Menus.odc, а к примеру MyMenu/Menus.odc. Попытка оказалась не удачной. При запуске из другой дериктории "новая среда" открывалась с ошибкой файл меню не найден .


Честно говоря, не понял вашей идеи. Ну-ка, поподробнее...


КСТАТИ:
У паковщика есть одна особенность - если рядом с экзешником открыто лежит файл, то он перекрывает припакованным с таким же именем. Если вдуматься, то логично: сохраняется расширяемость даже для приложений, упаокванных в единый EXE. Еще одна причина использовать DevPacker, а не DevLinker, если не требуется как раз обратное (по причинам защищенности программы, например).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 07 Апрель, 2006 17:26 

Зарегистрирован: Понедельник, 03 Апрель, 2006 11:49
Сообщения: 4
Илья Ермаков писал(а):
Цитата:
Честно говоря, не понял вашей идеи. Ну-ка, поподробнее....


упаковщик собирает коды в экзэшник , и последний из кодов висит файл меню, так вот путь к этому файлу я и хотел поменять на свой.
ПС. Я ,естественно , использую найденую вами утилиту CreateTool


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 07 Апрель, 2006 18:34 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Ну, вот пример из DevPacker, здесь файл Config берется из своего:

Цитата:
DevPacker.PackThis exefilename.exe :=
Tour.odc "C:\Program files\BlackBox\License.txt" Test/Code/MyConfig.ocf => Code/Config.ocf


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 07 Апрель, 2006 23:41 

Зарегистрирован: Понедельник, 03 Апрель, 2006 11:49
Сообщения: 4
Код:
Tool for: new7
Created: 7 àïðåëÿ 2006 ã., 23:37:53

To compile:

 DevCompiler.CompileThis
National Kernel Files Math Strings Dialog Stores Sequencers Meta Converters Models Fonts Ports Services Log Views Printers Dates Printing Mechanisms Controllers Properties Containers Documents Windows Config Init Controls new7


To unload:
command

To link (executable to which files can be packed):

 DevLinker.Link exefilename.exe :=
Kernel$+ Files HostFiles HostPackedFiles StdLoader
1 Applogo.ico 2 Doclogo.ico 3 SFLogo.ico 4 CFLogo.ico 5 DtyLogo.ico
6 folderimg.ico 7 openimg.ico 8 leafimg.ico
1 Move.cur 2 Copy.cur 3 Link.cur 4 Pick.cur 5 Stop.cur 6 Hand.cur 7 Table.cur


To pack:

 DevPacker.PackThis exefilename.exe :=
Epse21/Code/SysWindows.ocf Info21sys/Code/Windows.ocf System/Code/Config.ocf
Text/Code/Cmds.ocf Text/Code/Mappers.ocf Std/Code/Links.ocf
Std/Code/MenuTool.ocf Host/Code/Cmds.ocf Host/Code/Clipboard.ocf
Std/Code/Interpreter.ocf Host/Code/CFrames.ocf Std/Code/CFrames.ocf
System/Code/Controls.ocf Host/Code/Menus.ocf Text/Code/Controllers.ocf
Text/Code/Setters.ocf Text/Code/Rulers.ocf Text/Code/Models.ocf
Text/Code/Views.ocf Std/Code/Api.ocf Std/Code/Dialog.ocf
Std/Code/Cmds.ocf Host/Code/Windows.ocf System/Code/Printing.ocf
Host/Code/Printers.ocf System/Code/Printers.ocf System/Code/Documents.ocf
Host/Code/Ports.ocf Ole/Code/Data.ocf Host/Code/Mechanisms.ocf
System/Code/Mechanisms.ocf System/Code/Containers.ocf System/Code/Properties.ocf
System/Code/Controllers.ocf System/Code/Services.ocf System/Code/Windows.ocf
System/Code/Sequencers.ocf System/Code/Models.ocf Std/Code/Log.ocf
System/Code/Log.ocf System/Code/Views.ocf System/Code/Stores.ocf
System/Code/Ports.ocf Host/Code/Registry.ocf Host/Code/Fonts.ocf
System/Code/Fonts.ocf System/Code/Dates.ocf System/Code/Math.ocf
System/Code/Strings.ocf Host/Code/Dialog.ocf System/Code/Dialog.ocf
System/Code/Init.ocf Host/Code/Files.ocf System/Code/Files.ocf
Std/Code/Loader.ocf System/Code/National.ocf System/Code/Kernel.ocf
System/Code/Meta.ocf System/Code/Converters.ocf System/Code/new7.ocf
System/Rsrc/Menus.odc

Вот об этом я говорю , в конце паковщика есть файл меню , вот его я и хотел поменять (перенаправить на свое).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Суббота, 08 Апрель, 2006 01:05 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
MyMenus/Menus.odc => System/Rsrc/Menus.odc

- неужели не заработало?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 15 ] 

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


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

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


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

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