Странности портирования с Delphi на Lazarus
От: Khimik  
Дата: 11.04.22 09:56
Оценка:
Пытаюсь портировать свою программу с Delphi на Lazarus. Выбрал Сервис/Преобразование кода на Delphi/Преобразовать проект Delphi в проект Lazarus. Далее Lazarus что-то нагенерировал, у меня появился его проект, но скомпилировать этот проект не удалось: сразу возникла ошибка Circular unit reference между моим модулем и модулем VCL.
Я не исключаю, что это вообще баг Lazarus, потому что очень странно видеть такую ошибку, и с другим проектом её не возникло. У меня Lazarus 2.0.12.
Не знаю, связан ли этот баг с этим, но при конвертации Delphi-проекта в Lazarus у меня появились дублированные модули. У меня есть модуль simplefuncs, и в окне Lazarus появился второй модуль simplefuncs(2), с ним и возникла эта ошибка Circular unit reference.
Подскажите, как можно посмотреть, где конкретно находится определённый модуль в Lazarus-проекте (в каком файле)? И почему у меня произошло дублирование?
"Ты должен сделать добро из зла, потому что его больше не из чего сделать". АБ Стругацкие.
Re: Странности портирования с Delphi на Lazarus
От: LuciferNovoros Россия  
Дата: 11.04.22 12:06
Оценка:
Здравствуйте, Khimik, Вы писали:

K>Я не исключаю, что это вообще баг Lazarus, потому что очень странно видеть такую ошибку, и с другим проектом её не возникло. У меня Lazarus 2.0.12.


Так-то релизный уже 2.2.0. Попробуй обновиться. Возможно, что этот баг относится к конкретной версии.

K>Не знаю, связан ли этот баг с этим, но при конвертации Delphi-проекта в Lazarus у меня появились дублированные модули. У меня есть модуль simplefuncs, и в окне Lazarus появился второй модуль simplefuncs(2), с ним и возникла эта ошибка Circular unit reference.

K>Подскажите, как можно посмотреть, где конкретно находится определённый модуль в Lazarus-проекте (в каком файле)? И почему у меня произошло дублирование?

Попробуй перенести модуль, на который идет ругань, в секцию implemintation. Возможно, что это поможет.
Второй момент. А нет ли дублирующихся модулей в путях поиска? Неплохо было бы видеть полное сообщение об ошибке.
Re[2]: Странности портирования с Delphi на Lazarus
От: Khimik  
Дата: 11.04.22 14:12
Оценка:
Здравствуйте, LuciferNovoros, Вы писали:

LN>Здравствуйте, Khimik, Вы писали:


K>>Я не исключаю, что это вообще баг Lazarus, потому что очень странно видеть такую ошибку, и с другим проектом её не возникло. У меня Lazarus 2.0.12.


LN>Так-то релизный уже 2.2.0. Попробуй обновиться. Возможно, что этот баг относится к конкретной версии.


Скачал, поставил, действительно эта ошибка уже не всплывает, но появилась какая-то другая:

forms.pp(21,59) Fatal: Invalid PPU-File entry: 87

Такое ощущение, что Lazarus вообще сильно глючная вещь. Как они поддерживают бесплатный проект?
"Ты должен сделать добро из зла, потому что его больше не из чего сделать". АБ Стругацкие.
Re[2]: Странности портирования с Delphi на Lazarus
От: Khimik  
Дата: 11.04.22 14:17
Оценка:
Здравствуйте, LuciferNovoros, Вы писали:

LN>Здравствуйте, Khimik, Вы писали:


K>>Я не исключаю, что это вообще баг Lazarus, потому что очень странно видеть такую ошибку, и с другим проектом её не возникло. У меня Lazarus 2.0.12.


LN>Так-то релизный уже 2.2.0. Попробуй обновиться. Возможно, что этот баг относится к конкретной версии.


С версией 2.2.0 стало ещё хуже: раньше другое простенькое приложение, почти такое простенькое как Hello Word, у меня нормально конвертировалось, а теперь и с ним вылетела такая же ошибка:

forms.pp(7,36) Fatal: Invalid PPU-File entry: 87
"Ты должен сделать добро из зла, потому что его больше не из чего сделать". АБ Стругацкие.
Re[3]: Странности портирования с Delphi на Lazarus
От: LuciferNovoros Россия  
Дата: 11.04.22 14:20
Оценка:
Здравствуйте, Khimik, Вы писали:

K>forms.pp(21,59) Fatal: Invalid PPU-File entry: 87


Найти этот PPU и удалить его. Скорее всего, он от предыдущей версии. Вариант второй — пересобрать сам лазарус с профилем "Очистить всё и собрать". Это гарантировано удалит все левые объектные файлы старых версий.

K>Такое ощущение, что Lazarus вообще сильно глючная вещь. Как они поддерживают бесплатный проект?


Ты ошибаешься. Вполне рабочая лошадь. Намного лучше, чем дельфа. А уж по части кроссплатформенности дельфа даже рядом не валялась.
Re[4]: Странности портирования с Delphi на Lazarus
От: Khimik  
Дата: 11.04.22 14:47
Оценка:
Здравствуйте, LuciferNovoros, Вы писали:

LN>Здравствуйте, Khimik, Вы писали:


K>>forms.pp(21,59) Fatal: Invalid PPU-File entry: 87


LN>Найти этот PPU и удалить его. Скорее всего, он от предыдущей версии. Вариант второй — пересобрать сам лазарус с профилем "Очистить всё и собрать". Это гарантировано удалит все левые объектные файлы старых версий.


Да, переустановил его и стало чуть полегче. Но по-прежнему возникает эта ошибка Circular unit reference. Самое странное, как вообще может всплыть ошибка Circular unit reference between simplefuncs and forms? Simplefuncs это мой модуль, но forms это же модуль vcl, он по определению не использует никаких моих модулей. Ок, я в моём модуле simplefuncs перевёл uses forms в implementation, и теперь уже выдаётся такое:

dialogs.pp(7,96) Fatal: Circular unit reference between Dialogs and Forms.
Dialogs и Forms это же два модуля VCL, как тут может возникнуть такая ошибка? Я посмотрел — в модуле Forms нет никакого упоминания Dialogs.
"Ты должен сделать добро из зла, потому что его больше не из чего сделать". АБ Стругацкие.
Re[5]: Странности портирования с Delphi на Lazarus
От: LuciferNovoros Россия  
Дата: 11.04.22 14:55
Оценка:
Здравствуйте, Khimik, Вы писали:

K>dialogs.pp(7,96) Fatal: Circular unit reference between Dialogs and Forms.

K>Dialogs и Forms это же два модуля VCL, как тут может возникнуть такая ошибка? Я посмотрел — в модуле Forms нет никакого упоминания Dialogs.

А в твоем модуле они точно нужны? Что-то мне подсказывает, что нет. Что в модуле лежит? Если просто именно функции, то поудалять лишнее. Если оно все же нужно, то перенести в implementation. Хотя, конечно, странно.

Я бы просто поудалял модули ненужные. В редакторе кода модуля ПКМ — Переработка кода — Неиспользуемые модули. Это первое. Потом пройтись руками. На ругань по поводу недостающих модулей — добавить их руками. Просто через Alt+F11 и поиск нужного
Re[6]: Странности портирования с Delphi на Lazarus
От: Khimik  
Дата: 12.04.22 11:07
Оценка:
Здравствуйте, LuciferNovoros, Вы писали:

LN>Здравствуйте, Khimik, Вы писали:


K>>dialogs.pp(7,96) Fatal: Circular unit reference between Dialogs and Forms.

K>>Dialogs и Forms это же два модуля VCL, как тут может возникнуть такая ошибка? Я посмотрел — в модуле Forms нет никакого упоминания Dialogs.

LN>А в твоем модуле они точно нужны? Что-то мне подсказывает, что нет. Что в модуле лежит? Если просто именно функции, то поудалять лишнее. Если оно все же нужно, то перенести в implementation. Хотя, конечно, странно.


Моя программа использует диалоги, так что наверно нужны. Тут всё-таки надо копать, почему мой модуль раздвоился. Был модуль simplefuncs, и добавился simplefuncs(2). Всё-таки как в Lazarus можно посмотреть, в каком файле находится конкретный модуль?
В этом модуле simplefuncs действительно были ссылки на dialogs и forms, и когда я их закомментировал, ошибка сменилась: уже circular unit reference between Controls and ImgList.
Т.е. очевидно что проблема связана с этим раздвоившимся модулем simplefuncs, и логичнее сначала попробовать разобраться, почему же он раздвоился.
"Ты должен сделать добро из зла, потому что его больше не из чего сделать". АБ Стругацкие.
Re[7]: Странности портирования с Delphi на Lazarus
От: LuciferNovoros Россия  
Дата: 12.04.22 13:21
Оценка:
Здравствуйте, Khimik, Вы писали:

K>Моя программа использует диалоги, так что наверно нужны. Тут всё-таки надо копать, почему мой модуль раздвоился. Был модуль simplefuncs, и добавился simplefuncs(2). Всё-таки как в Lazarus можно посмотреть, в каком файле находится конкретный модуль?

K>В этом модуле simplefuncs действительно были ссылки на dialogs и forms, и когда я их закомментировал, ошибка сменилась: уже circular unit reference between Controls and ImgList.
K>Т.е. очевидно что проблема связана с этим раздвоившимся модулем simplefuncs, и логичнее сначала попробовать разобраться, почему же он раздвоился.

Проект — Инспектор проекта. Внимательно посмотреть там — нет ли задвоения модулей. Неплохо так же Проект — Исходный код проекта. И, кстати, в исходнике проекта попробовать написать
{$mode Delphi}{$H+}

Если там, конечно, прописано
{$mode objfpc}{$H+}


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