OberonCore https://forum.oberoncore.ru/ |
|
Еще раз про линкер. https://forum.oberoncore.ru/viewtopic.php?f=1&t=142 |
Страница 1 из 1 |
Автор: | CrayGEN [ Понедельник, 03 Апрель, 2006 12:10 ] |
Заголовок сообщения: | Еще раз про линкер. |
Всем привет! Неделю назад узнал о такой системе как ББ. Тут же скачал , установил , русифицировал. Прочитал проктически всю документацию , как по самому языку , так и по среде . Сам являюсь поклонником Модулы-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 ] |
Заголовок сообщения: | |
Здравствуйте! Рады видеть вас на нашем форуме ![]() С линковкой в ББ немного сложнее, чем в других средах - по сути-то своей среда ориентирована на динамическую линковку. В большинстве случаев статическую линковку всего проекта не делают, просто убирают ненужные подсистемы, пересобирают 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 ] |
Заголовок сообщения: | |
Наткнулся, кстати говоря, на еще одну полезную штуку. Можно составить список из своих модулей (разделяя пробелами), выделить его и нажать Info->Create Tool. Будет создан документ, содержащий команды для их компиляции в правильном порядке, для линковки минимального exe-шника и для упаковки в него всего run-time. |
Автор: | Иван Горячев [ Четверг, 06 Апрель, 2006 06:05 ] |
Заголовок сообщения: | |
Вот только команду для линковки в правильном порядке он не производит ![]() |
Автор: | Сергей Оборотов [ Четверг, 06 Апрель, 2006 07:15 ] |
Заголовок сообщения: | |
Илья Ермаков писал(а): Рады видеть вас на нашем форуме Неплохо было бы иметь возможность указывать модуль, выполняющий функции модуля System.Init в слинкованном приложении через переменную окружения ("INIT" например). Чуть меньше путаницы будет. Трудно сказать относится ли это предложение к сути системы. По-моему, такое заявление достаточно сильное. Скорее типичное расширение.
![]() С линковкой в ББ немного сложнее, чем в других средах - по сути-то своей среда ориентирована на динамическую линковку. |
Автор: | Иван Горячев [ Четверг, 06 Апрель, 2006 08:08 ] |
Заголовок сообщения: | |
А зачем собственно? Перед линковкой компилируете нужный модуль (главное чтоб назывался Init), а после линковки убиваете полученный кодовый файл. Или имеется в виду возможность в слинкованном приложении подключать различные варианты Init? |
Автор: | Сергей Оборотов [ Четверг, 06 Апрель, 2006 14:54 ] |
Заголовок сообщения: | |
Когда я удаляю файлы у меня нет цели их использовать в дальнейшем. Здесь же случай другой. Также плюс в том, что сохраняется возможность одновременной работы стандартного BlackBox. Пока достаточно. |
Автор: | Илья Ермаков [ Четверг, 06 Апрель, 2006 15:36 ] |
Заголовок сообщения: | |
Цитата: Также плюс в том, что сохраняется возможность одновременной работы стандартного BlackBox.
Дык для этого существует так называемый "серверный запуск", с параметром /USE (см. левую нижнюю колонку документации). У меня иногода до 6-7 профилей бывает, на каждый свой ярлык - и вперед... |
Автор: | Сергей Оборотов [ Четверг, 06 Апрель, 2006 22:07 ] |
Заголовок сообщения: | |
Илья Ермаков писал(а): Цитата: Также плюс в том, что сохраняется возможность одновременной работы стандартного BlackBox. Дык для этого существует так называемый "серверный запуск", с параметром /USE. У меня иногда до 6-7 профилей ... |
Автор: | CrayGEN [ Четверг, 06 Апрель, 2006 23:40 ] |
Заголовок сообщения: | |
Илья Ермаков писал(а): Здравствуйте! Рады видеть вас на нашем форуме
![]() С линковкой в ББ немного сложнее, чем в других средах - по сути-то своей среда ориентирована на динамическую линковку. В большинстве случаев статическую линковку всего проекта не делают, просто убирают ненужные подсистемы, пересобирают 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 ] |
Заголовок сообщения: | |
Цитата: Т.е. дабы "сильно не мучаться" на этапе упаковки путь к меню указал свой т.е. не System/Rsrc/Menus.odc, а к примеру MyMenu/Menus.odc. Попытка оказалась не удачной. При запуске из другой дериктории "новая среда" открывалась с ошибкой файл меню не найден .
Честно говоря, не понял вашей идеи. Ну-ка, поподробнее... КСТАТИ: У паковщика есть одна особенность - если рядом с экзешником открыто лежит файл, то он перекрывает припакованным с таким же именем. Если вдуматься, то логично: сохраняется расширяемость даже для приложений, упаокванных в единый EXE. Еще одна причина использовать DevPacker, а не DevLinker, если не требуется как раз обратное (по причинам защищенности программы, например). |
Автор: | CrayGEN [ Пятница, 07 Апрель, 2006 17:26 ] |
Заголовок сообщения: | |
Илья Ермаков писал(а): Цитата: Честно говоря, не понял вашей идеи. Ну-ка, поподробнее.... упаковщик собирает коды в экзэшник , и последний из кодов висит файл меню, так вот путь к этому файлу я и хотел поменять на свой. ПС. Я ,естественно , использую найденую вами утилиту CreateTool |
Автор: | Илья Ермаков [ Пятница, 07 Апрель, 2006 18:34 ] |
Заголовок сообщения: | |
Ну, вот пример из DevPacker, здесь файл Config берется из своего: Цитата: DevPacker.PackThis exefilename.exe :=
Tour.odc "C:\Program files\BlackBox\License.txt" Test/Code/MyConfig.ocf => Code/Config.ocf |
Автор: | CrayGEN [ Пятница, 07 Апрель, 2006 23:41 ] |
Заголовок сообщения: | |
Код: 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 ] |
Заголовок сообщения: | |
MyMenus/Menus.odc => System/Rsrc/Menus.odc - неужели не заработало? |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |