OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Среда, 18 Июнь, 2025 01:18

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




Начать новую тему Ответить на тему  [ Сообщений: 46 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: DevLinker
СообщениеДобавлено: Суббота, 26 Ноябрь, 2005 18:54 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Привет!

Не получается слинковать (получить exe) для тестовой программы. Точнее получается до тех пор, пока дело не доходит до Kernel.

DevLinker.Link
MyBlackBox.exe := Kernel$+ MyTest

National not present (imported in Kernel)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Суббота, 26 Ноябрь, 2005 22:53 
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Дело в том, что в примере в документации не учитывается, что при русификации Горячевым был введен модуль National, который действительно импортируется ядром (раньше Kernel не зависел ни от чего). Поэтому в список для линковки нужно включить National.

Вот как пересобирал я:
Autorg.exe := National Kernel$+ Files HostFiles StdLoader
1 Autorg.ico 2 Doclogo.ico 3 SFLogo.ico 4 CFLogo.ico 5 DtyLogo.ico
1 Move.cur 2 Copy.cur 3 Link.cur 4 Pick.cur 5 Stop.cur 6 Hand.cur 7 Table.cur

Менял только иконку приложения.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Воскресенье, 27 Ноябрь, 2005 00:42 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Илья Ермаков писал(а):
Поэтому в список для линковки нужно включить National.


Я тоже так подумал и попробовал явно включить этот модуль в список. Только это не помогло. Оказывается имеет значение порядок, в котором указаны модули - у меня сначала шел Kernel, a потом National. В чем глубокий смысл такого ограничения?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Воскресенье, 27 Ноябрь, 2005 00:54 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4722
Откуда: Россия, Орёл
Порядок записи - порядок импорта модулей друг другом. Kernel импортирует National.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Воскресенье, 27 Ноябрь, 2005 00:59 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Борис Рюмшин писал(а):
Порядок записи - порядок импорта модулей друг другом. Kernel импортирует National.


Я это уже понял ;) Вопрос - зачем?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Воскресенье, 27 Ноябрь, 2005 01:28 
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Ну как зачем? Линковщик может, конечно, просчитать это сам. Но здесь немножко по-другому. Просто список можно сгенерить автоматически. Либо на основе загруженных модулей, либо на основе того, что необходимо для какого-то конкретного модуля. DevDependencies, кажется. Могу ошибаться... Где-то в документации Dev описано.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Воскресенье, 27 Ноябрь, 2005 01:47 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Илья Ермаков писал(а):
Ну как зачем? Линковщик может, конечно, просчитать это сам. Но здесь немножко по-другому. Просто список можно сгенерить автоматически. Либо на основе загруженных модулей, либо на основе того, что необходимо для какого-то конкретного модуля. DevDependencies, кажется. Могу ошибаться... Где-то в документации Dev описано.


Т.е., это можно считать банальной недоработкой линковщика (с точки зрения удобства использования) и никакого глубокого смысла в этом нет?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Воскресенье, 27 Ноябрь, 2005 01:51 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4722
Откуда: Россия, Орёл
Vlad писал(а):
Т.е., это можно считать банальной недоработкой линковщика (с точки зрения удобства использования) и никакого глубокого смысла в этом нет?


Попробуйте без make собрать вручную ядро Линукса. Узнаете как линковщики работают... :) А потом поговорим о недоработках, в плане удобства...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Воскресенье, 27 Ноябрь, 2005 02:05 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Борис Рюмшин писал(а):
Попробуйте без make собрать вручную ядро Линукса. Узнаете как линковщики работают... :) А потом поговорим о недоработках, в плане удобства...


Причем здесь линукс? Возможно при сборке его ядра для его линковщика этот порядок имеет какое-то значение (например, он влияет на порядок инициализации статических объектов). Меня интересует BB. Если порядок указания модулей ни на что не влияет (кроме факта успешной сборки), то это - недоработка.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Воскресенье, 27 Ноябрь, 2005 10:34 
Аватара пользователя

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

Причины две:
1) Линковка - этап редкий при обычной разработке под ББ. В основном предполагается поставка отдельных динамически загружаемых модулей (как и .NET, собственно говоря).
2) Если уже решено линковать, то обычно могут быть два варианта:
а) линкуется небольшое число модулей при пересборке ББ или сборке своего системного приложения. Тогда выстроить связи - не только не проблема, но даже лишний раз повод проанализировать, что от чего зависит
б) линкуется вся среда. Тогда вручную все равно никто писать сотни файлов не будет. Список генерится либо из списка текущих загруженных модулей, либо перечислением файлов конкретных подсистем.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Понедельник, 28 Ноябрь, 2005 11:38 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1437
Борис Рюмшин писал(а):
Порядок записи - порядок импорта модулей друг другом.

Не только. Это ещё и порядок инициализации. Иногда он бывает очень важен и его нельзя так просто вычислить по зависимостям.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вторник, 13 Декабрь, 2005 05:56 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 10:37
Сообщения: 875
Откуда: Россия, Владивосток
Тут ещё такая штука: в общем случае нельзя автоматически построить необходимый и достаточный список нужных для линковки модулей.

Если мы будем брать только импортируемые модули, тогда (при грамотно спроектированном приложении) мы пропустим всю подсистему Host, например, которая жизненно необходима для работы (никто ведь не будет импортировать HostFiles, все пользуются Files).

Если мы будем ориентироваться на загруженные в данный момент модули, мы со стопроцентной вероятностью поимеем слинкованный DevLinker, и с очень большой вероятностью - модули компилятора.

Вот и приходится необходимые модули вручную указывать...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вторник, 13 Декабрь, 2005 11:59 
Аватара пользователя

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 13:17
Сообщения: 84
Откуда: Россия, Мурманск
Ivor писал(а):
Если мы будем брать только импортируемые модули, тогда (при грамотно спроектированном приложении) мы пропустим всю подсистему Host, например, которая жизненно необходима для работы (никто ведь не будет импортировать HostFiles, все пользуются Files).

Не понял чё-то я. Ведь сам Files импортирует HostFiles? Так в чём проблема? По-моему сформировать список достаточных для работы модулей - задача вполне решаемая.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вторник, 13 Декабрь, 2005 12:02 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1437
sacred писал(а):
Не понял чё-то я. Ведь сам Files импортирует HostFiles? Так в чём проблема?

Проблмема в том, что не импортирует .;)


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

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Sacred, дело в том, что действительно не импортирует. Иначе бы получилась зависимость абстракного переносимого модуля Files от платформенно зависимого HostFiles. В Files (и в Ports, и др.) объявлены абстрактные файлы, порты, ... , для создания которых объявлены не менее асбтрактые фабрики Directory. А как клиент получает доступ к конкрентной фабрике? При загрузке среды и инициализации модули Host вызывают SetDirectory соответствующих абстрактных модулей, т.е. делают инсталляцию фабрики. А клиентские модули приходят уже "на готовенькое" и знают только, что текущая фабрика находится в переменной dir абстрактного модуля. Кстати, никто не мешает подменить фабрику прямо "на горячую". Предыдущая останется доступной через stdDir.


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

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Ещё секрет DevLinker: чтобы собрать экзешник с признаком CUI ("врождённо-консольного" приложения), используется ключ dos:
DevLinker.Link dos MyApp.exe := ...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DevLinker
СообщениеДобавлено: Вторник, 24 Февраль, 2009 22:41 

Зарегистрирован: Суббота, 02 Август, 2008 23:01
Сообщения: 43
Илья, Ваш пример модуля, использующего glut, я успешно скомпоновал, но вот когда добавил в пример импорт ещё одного модуля и внёс его в список компонуемых модулей, то получил "failed". После чего осознал, что недопонимаю, по каким же принципам работает линковщик. Не осветите ли суть?:)

Условно говоря, у Вас было
Код:
IMPORT GL := OglOpenGL32, GLUT := OglGLUT, Math, Kernel, WinApi, S := SYSTEM;
DevLinker.LinkExe SimpleApp.exe := National Kernel+ Math OglSimpleApp$

и всё вышло ok.

А потом я сделал
Код:
IMPORT GL := OglOpenGL32, GLUT := OglGLUT, Math, NewModule, Kernel, WinApi, S := SYSTEM;
DevLinker.LinkExe SimpleApp.exe := National Kernel+ NewModule Math OglSimpleApp$

и получил failed.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DevLinker
СообщениеДобавлено: Вторник, 24 Февраль, 2009 22:47 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Скорее всего, Вы не указали те модули, которые требуются для NewModule, перед ним в команде:
Код:
DevLinker.LinkExe SimpleApp.exe := National Kernel+ NewModule Math OglSimpleApp$

Если так, смотрите внимательно лог (журнал). Там будет указано, что NewModule импортирует такие-то модули, а в списке (до него) их нету. Впишите.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DevLinker
СообщениеДобавлено: Воскресенье, 05 Апрель, 2009 20:02 

Зарегистрирован: Четверг, 02 Апрель, 2009 13:42
Сообщения: 23
У меня жесть полная...Со временем, пока я прописывал те модули, которые "not present", я получил следующий список... :arrow:

Код:
DevLinker.Link
Dammit.exe := National Kernel$ + Files HostFiles StdLoader Dialog Meta Services Fonts Math Strings Stores Sequencers Models  Ports Log Converters Views Controllers Properties Mechanisms Containers FormModels FormViews FormControllers AbfProperties Printers Dates Printing Documents Windows AbfMedia StdCFrames Controls HostRegistry HostFonts HostPorts OleData HostMechanisms HostWindows HostPrinters StdDialog StdApi StdCmds HostCFrames HostDialog TextModels TextMappers TextRulers TextSetters TextViews TextControllers StdLog SternCanvas SternAscii ObxRandom MtChars MtFiles DevMarkers DevCommanders DevSelectors DevCPM DevCPT DevCPB DevCPS DevCPP DevCPE DevCPH DevCPL486 DevCPC486 DevCPV486 DevCompiler (*Дальше идут мои модули*)


Слинковав все вот это и запустив, я получил trap#100

Там идут жалобы из кёрнеля, стдлодыря и FormViews...

Когда я написал...

Код:
DevLinker.LinkExe
Dammit.exe := National Kernel$ + Files HostFiles StdLoader Dialog Meta Services Fonts Math Strings Stores Sequencers Models  Ports Log Converters Views Controllers Properties Mechanisms Containers FormModels FormViews FormControllers AbfProperties Printers Dates Printing Documents Windows AbfMedia StdCFrames Controls HostRegistry HostFonts HostPorts OleData HostMechanisms HostWindows HostPrinters StdDialog StdApi StdCmds HostCFrames HostDialog TextModels TextMappers TextRulers TextSetters TextViews TextControllers StdLog SternCanvas SternAscii ObxRandom MtChars MtFiles DevMarkers DevCommanders DevSelectors DevCPM DevCPT DevCPB DevCPS DevCPP DevCPE DevCPH DevCPL486 DevCPC486 DevCPV486 DevCompiler (*Дальше идут мои модули*)


На меня пожаловались, мол illegal memory read [ad = FFFFFFFC], а дальше, чего там понаписано я писать не буду...

Я вообще не понял чего он от меня хочет... :?

Отсюда, следует логичный традиционный вопрос: "Что делать?"


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

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Извините, но буду вынужден ответить не менее традиционным вопросом на традиционный вопрос. :) А что же Вам надо? (Задачу сформулируйте)


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

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


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

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


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

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