Error while compiling resources compile with vd for more details check for duplicates

Модератор: Модераторы

Странная ошибка при компиляции

Модератор: Модераторы

Странная ошибка при компиляции

Приветствую уважаемых коллег.

Разрабатываю большой проект на Лазаре. При компиляции в Linux у меня возникает такая бага:

Materials_oper.lpr(40,1) Error: Error while compiling resources. Compile with -vd for more details. Check for duplicates.

Тот же самый проект в винде компилируется и работает без проблем.

Прошу подсказать, где копать.

Добавлено спустя 1 минуту 52 секунды:
Да, забыл. Lazarus 1.2.6, FPC 2.6.4, SVN: Unversioned directory, i386-linux-gtk2.

slyubez
постоялец
 
Сообщения: 145
Зарегистрирован: 31.03.2015 08:44:07

Re: Странная ошибка при компиляции

Сообщение wavebvg » 20.04.2015 15:38:30

Удалите папку с собранными объектниками (обычно lib)
Проверьте имена файлов
Если что-то переименовывали, то, возможно, накосячили с регистрами и теперь Вам очень нужно найти косяк и исправить его.

wavebvg
постоялец
 
Сообщения: 347
Зарегистрирован: 28.02.2008 04:57:35

Re: Странная ошибка при компиляции

Сообщение slyubez » 20.04.2015 16:24:34

Спасибо за подсказку. Я и забыл, что в пингвине файловые идентификаторы регистрочувствительные. Буду рыть.

Добавлено спустя 3 часа 38 минут 59 секунд:
Не помогло, все чисто.

Похоже, я не один такой, и проблема не решается.

http://forum.lazarus.freepascal.org/ind … ic=21782.0

slyubez
постоялец
 
Сообщения: 145
Зарегистрирован: 31.03.2015 08:44:07

Re: Странная ошибка при компиляции

Сообщение Ism » 20.04.2015 20:50:34

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

Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: Странная ошибка при компиляции

Сообщение slyubez » 20.04.2015 20:58:27

Тут надо полный лог компиляции смотреть

Как бы его получить…
Пробовал запустить Лазаря под sudo из консоли. В процессе компиляции вышло много инфы (даже больше, чем в окно сообщений), но и там ничего особенного.

Добавлено спустя 1 минуту 24 секунды:

Materials_oper.lpr(40,1) Error: Error while compiling resources
Materials_oper.lpr(40,1) Fatal: There were 1 errors compiling module, stopping
TMessagesView.CollectLineParts WARNING: 138<>136 SrcLine=Materials_oper.lpr(40,1) Fatal: There were 1 errors compiling module, stopping
TLazSourceFileManager.OpenEditorFile Fixing file name: /home/slyubez/svn/MatOper/ -> /home/slyubez/svn/MatOper
TLazSourceFileManager.OpenEditorFile skipping directory /home/slyubez/svn/MatOper
TMainIDE.DoBuildProject Compile failed
TSourceEditorSharedValues.GetMainLinkScanner not a pascal source: /home/slyubez/svn/MatOper/Materials_oper.lpi

Добавлено спустя 39 минут 34 секунды:
Сделал тест параметров компилятора и наткнулся на такую вещь (см. вложение). Теперь думаю, что делать дальше.

Добавлено спустя 25 минут 36 секунд:
Попробовал переместить файлы dialogs.ppu, dialogs.o, menus.ppu и menus.o из библиотек fpc во временный каталог. Делаю пересборку — бесполезно, ошибка та же самая.

Добавлено спустя 46 минут 10 секунд:
Такие же предупреждения есть и в виндовой версии Лазаря, но там они не мешают компиляции. После перемещения файлов в Линухе предупреждения исчезли, но проблема никуда не делась.

У вас нет необходимых прав для просмотра вложений в этом сообщении.

slyubez
постоялец
 
Сообщения: 145
Зарегистрирован: 31.03.2015 08:44:07

Re: Странная ошибка при компиляции

Сообщение Ism » 20.04.2015 22:56:56

1 Попробуйте установить Лазерус начистую, дубли могут быть следствием экспериментов со сборкой. Или перекомпиликовать Лазарус с полной очисткой

2 Удалите дубли в одной из директорий

Но вообще этого быть не должно, возможно проект содержит настройки, провоцирующие создание дублей. Тут поможет лишь пересоздание проекта с нуля и переноса форм и модулей со старого, иногда помогает

Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: Странная ошибка при компиляции

Сообщение slyubez » 20.04.2015 23:02:09

Тут надо переставлять и Лазаря, и FPC с предварительным сносом подчистую вместе со всеми настройками и прочим мусором. Я уже пробовал переставлять Lazarus без FPC, снеся впридачу каталог настройки — не помогло.

slyubez
постоялец
 
Сообщения: 145
Зарегистрирован: 31.03.2015 08:44:07

Re: Странная ошибка при компиляции

Сообщение Vadim » 21.04.2015 03:48:47

slyubez
А Вы не делали то, что советует Вам сам компилятор?

slyubez писал(а):Compile with -vd for more details.

Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Странная ошибка при компиляции

Сообщение slyubez » 21.04.2015 09:39:46

Честно, я пока не настолько спец по Лазарусу и не смог разобраться, где в среде подставить этот ключ компилятора. Я попробовал скопировать параметры из списка и скормить их файлу /usr/bin/fpc, добавив туда путь и имя lpr-файла проекта и опцию -vd. При запуске компилятор проверил опции и далее на первом же файле после lpr, выдав ряд хинтов и warning, выругался — can’t create object file 123.o без указания конкретной причины. Пробовал то же под sudo — не помогает.

Добавлено спустя 32 минуты 1 секунду:
UPD.
Блин, фантастика какая-то. Выяснил, что объектный файл не создается, так как я потер каталог lib. Создаю его и подкаталоги, повторяю компиляцию. Появляется ошибка о ненахождении ресурсного файла проекта — его я тоже вытер. Открываю IDE — ошибка в лексеме lfm-файла основной формы. Закрываю среду. Открываю RapidSVN, вижу ряд конфликтов и изменений. Отменяю изменения по всем файлам. Открываю среду и проект в ней, компилирую — ошибки уже нет, успешная компиляция. Что, откуда, как, почему — непонятно.

slyubez
постоялец
 
Сообщения: 145
Зарегистрирован: 31.03.2015 08:44:07

Re: Странная ошибка при компиляции

Сообщение Vadim » 21.04.2015 11:25:24

Параметры компиляции в Lazarus можно задавать через меню:
Проект -> Параметры проекта -> Параметры компилятора

В пункте «Подробность вывода» есть есть галочка специально для Вас: показывать отладочную информацию (-vd).

Посмотрите все опции, есть интересные, например для уменьшения размера откомпилированной программы (-XX).
——————————————-
Вы когда поставили себе Lazarus с FPC, SVN-ом постарайтесь не сильно злоупотреблять. Дело в том, что новые выкладки для Lazarus выходят каждую ночь и не все эти выкладки нормально действуют на IDE. Лучше всего переходить на новую версию только тогда, когда там появляется такая то фича, которая Вам крайне необходима или исправлена та ошибка, которая Вам раньше нормально жить не давала. ;-)

Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Странная ошибка при компиляции

Сообщение slyubez » 21.04.2015 11:34:45

Дело в том, что новые выкладки для Lazarus выходят каждую ночь и не все эти выкладки нормально действуют на IDE.

SVN я использую только для своего проекта, и изменения были именно в его репозитории. Версии Lazarus и FPC у меня стабильные, и я не беру их обновления с SVN-репозитория Lazarus. У меня три машины с разными ОС, на которых я веду разработку, и все они цепляются к этому репозиторию через либо TortoiseSVN (Windows), либо через RapidSVN (Linux). Возможно, какой-то из клиентов глюкнул при закоммичивании изменений.
А за инфу по размещению ключей спасибо, буду знать.

slyubez
постоялец
 
Сообщения: 145
Зарегистрирован: 31.03.2015 08:44:07

Re: Странная ошибка при компиляции

Сообщение pupsik » 22.04.2015 19:43:38

Пробовал запустить Лазаря под sudo из консоли

А вы все через судо делаете? :shock:

Error while compiling resources

— ругня на {$R *.res} файл.

Делаю пересборку — бесполезно, ошибка та же самая.

Т.е. лазарь у вас без проблем собирается, а ваш проект с багом?

п.с.
Попробовал я «проблемный проект» по вашей ссылке… У меня он запустился без малейшей проблемы. Подскажите: как можно так сломать лазарь? :)

Vadim

Лучше всего переходить на новую версию только тогда, когда там появляется такая то фича

И как узнать когда эта фича появляется? Бубен в руки что ли :)

pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13
  • Профиль
  • Сайт

Re: Странная ошибка при компиляции

Сообщение slyubez » 22.04.2015 21:11:12

А вы все через судо делаете?

Если надо пересобрать компоненты или подправить их код — приходится так делать.

Попробовал я «проблемный проект» по вашей ссылке…

Это по какой еще ссылке? Тынц на пост со ссылкой — в студию.
А вообще проблема уже решена.

slyubez
постоялец
 
Сообщения: 145
Зарегистрирован: 31.03.2015 08:44:07

Re: Странная ошибка при компиляции

Сообщение pupsik » 22.04.2015 22:35:03

Похоже, я не один такой, и проблема не решается.

сперва пишут, а потом забывают… Это ваш ТЫНЦ. Сорцы по ссылке лежат (возможно вы не зарегились на форуме, вот и не увидели :) Или это не вы были :lol:

п.с.
А вы слышали о правах на папку? sudo как и su чутку «карму» портит :)

Кстати: я ведь не писал что это ВАШ проект… :roll:

pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13
  • Профиль
  • Сайт

Re: Странная ошибка при компиляции

Сообщение slyubez » 23.04.2015 17:35:10

сперва пишут, а потом забывают… Это ваш ТЫНЦ.

Теперь понял. Дав этот тынц, я показал, что не только у меня есть эта проблема. Те аглицкие посты писал не я. Я там не зарегистрирован, потому сорцов не вижу.

А вы слышали о правах на папку? sudo как и su чутку «карму» портит

Прекрасно знаю. Вот я и подумал, что Лазарь пытался что-то пересобрать из компонентов, сорцы которых простой юзер может только читать, но не корректировать (и даже не всегда — компилировать и собирать). Вчера вот вносил правку в сорцы LazReport на линуксовой машине с Mint — их ведь без sudo не отредактируешь (исключение — работа под рутом в тех версиях пингвина, которые разрешают такие вещи).

slyubez
постоялец
 
Сообщения: 145
Зарегистрирован: 31.03.2015 08:44:07


Вернуться в Lazarus

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

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

[Перепост сюда моей записи http://jorra-jorra.livejournal.com/46547.html]

[использовались версии продуктов: КОМПАС LT v12, Lazarus — 1.0.4]

Очень обрадовало, что к КОМПАСу прилагается SDK в т.ч. и под любимую Delphi. Но уже давно её не использую просто по причине платности, ведь появился реальный конкурент — Lazarus. Во-первых, freeware, во-вторых, — по возможностям же практически идентичен (а кое-в чём заметно превосходит) Delphi. Хотя, равно, и корявый немного.
Т.к тема бесплатности софта для разработки актуальна, то думаю, мой опыт по адаптации SDK КОМПАСа для Delphi под Lazarus кому-нибудь пригодится. Хотя бы даже чтоб не гулговать десятки статей и постов на каждую ошибку компилятора, как это делал я.

Пишу списком, всё что на данный момент обнаружил.

1) Для начала стоит добавить в папку с примером из набора SDK (или с вашим проектом) файлы из папки Include (все файлы *.pas). Чтобы при преобразовании проекта у Lazarus’а не возникало лишних вопросов. Или же добавить эту папку в настройках Lazarus’а.

2) Первым делом необходимо преобразовать проект Delphi в проект Lazarus. Это делается соответствующей командой в меню Сервис. На этом этапе следует иметь в виду, что у контролов Lazarus’а (LCL) отсутствуют некоторые дельфячьи свойства, поэтому их придётся удалить, или же в дальнейшем дописать аналоги самостоятельно. Но таких, к счастью, очень немного.

3) В некоторых файлах из папки Include SDK (например, LIBdb.pas) почему-то имеется синтаксическая ошибка — после объявления функции в конце пропущена точка с запятой. Косяк разработчиков, не Lazarus’а. Придётся исправлять самостоятельно.

4) Почти во всех модулях из папки Include имеются ссылки (в секции Uses) на модули OleCtrls и StdVCL, которые отсутствуют в Lazarus’е. Первый можно заменить на Ole2 (судя по составу; по крайней мере, кушает успешно), а вторую ссылку можно вобще удалить.

5) Ресурсы. Примеры из SDK имеют объявления вида
{$R ‘Cube2.res’ ‘Cube2.rc’}
и Lazarus ругается на отсутствующий файл *.res. Лечится удалением неправильного объявления с *.res (т.е. получается {$R ‘Cube2.rc’}).

6) Ещё ресурсы. Для примеров из SDK выдаётся сообщение вида
gaykaLT.lpr(35,1) Error: Error while compiling resources. Compile with -vd for more details. Check for duplicates.
Оказалось, что в примерах из SDK то ли не правильная структура файла *.rc, то ли всётаки не их вина… В общем, сработала следующая методика. 1) Файл *.rc из примера переименовываем в *.dat. 2) Создаём текстовый файл XXX.rc (где XXX — название проекта, или же как он указан у вас в ссылке $R), с единственной строкой вида
MYDATA RCDATA «XXX.dat»
, где XXX — см. выше, имя файла *.dat.
После этого линковщик успешно линкует ресурсы. Вроде бы — по крайней мере, не ругается.

7) Если проект успешно скомпиллирован, начинает линковаться, но выдаёт ошибку вида
gaykaLT.lpr(35,1) Error: Undefined symbol: WSRegisterMainMenu
(далее идёт штук 40-50 ненайденных символов с префиксом WS*, и ссылаются все ошибки на конец главного файла проекта) — как пишут в Сети (и реально помогло), надо подставить ссылку в разделе Uses на модуль Interfaces. Эта ссылка, видимо, требуется только в главном файле проекта, *.lpr. Также опыт показал, что ссылки на некоторые интерфейсные модули (например, на InterfaceBase даже не в главном файле проекта, а в «главном» модуле) также устраняет данную ошибку.

8) В случае примеров из папки SDK, даже если пример успешно скомпилируется, — скорее всего, и название библиотеки в меню, и выдаваемые ею сообщения (может и названия контролов и т.п. — не тестил) будут выглядеть, как вариант «кракозябр»:
РС,Рѕ С…СѓР№РЅСЏ
В этом случае следует добавить строчку
{$codepage UTF8}
в самое начало, видимо, каждого модуля, где имеются выводимые на экран тем или иным образом строчки в кириллице.

9) [Случай только для бесплатной версии КОМПАСа — LT, хотя всем программистам стоит иметь в виду] После успешной сборки и компиляции загрузка в библиотеку выдаёт ошибку 126:
<имя файла.dll>: error 126
и затем нечто вроде «Ошибка подключения библиотеки XXX», где XXX — имя файла *.dll. В этом случае необходимо добавить в проект глобальную директиву компилятора
-d__LIGHT_VERSION__
(эта строка добавляется в Параметры проекта => Параметры компилятора => Другое). Обратите внимание, что пишется без пробела (это важно!). Как вариант, можно добавлять как обычный $DEFINE, но тогда в каждый соответствующий модуль отдельно.

10) Application.Hanlde…
Допишу потом!

Пока всё. По мере освоения SDK постараюсь описать другие грабли, костыли и косяки.
Надеюсь, кому-нибудь поможет, но уж и вы — отпишите о своих достижениях.
Также, конечно же, пишите свои варианты исправления косяков и устранения разницы между Delphi и Lazarus.

[использовались версии продуктов: КОМПАС LT v12, Lazarus — 1.0.4]

Очень обрадовало, что к КОМПАСу прилагается SDK в т.ч. и под любимую Delphi. Но уже давно её не использую просто по причине платности, ведь появился реальный конкурент — Lazarus. Во-первых, freeware, во-вторых, — по возможностям же практически идентичен (а кое-в чём заметно превосходит) Delphi. Хотя, равно, и корявый немного.
Т.к тема бесплатности софта для разработки актуальна, то думаю, мой опыт по адаптации SDK КОМПАСа для Delphi под Lazarus кому-нибудь пригодится. Хотя бы даже чтоб не гулговать десятки статей и постов на каждую ошибку компилятора, как это делал я.

Пишу списком, всё что на данный момент обнаружил.

1) Для начала стоит добавить в папку с примером из набора SDK (или с вашим проектом) файлы из папки Include (все файлы *.pas). Чтобы при преобразовании проекта у Lazarus’а не возникало лишних вопросов. Или же добавить эту папку в настройках Lazarus’а.

2) Первым делом необходимо преобразовать проект Delphi в проект Lazarus. Это делается соответствующей командой в меню Сервис. На этом этапе следует иметь в виду, что у контролов Lazarus’а (LCL) отсутствуют некоторые дельфячьи свойства, поэтому их придётся удалить, или же в дальнейшем дописать аналоги самостоятельно. Но таких, к счастью, очень немного.

3) В некоторых файлах из папки Include SDK (например, LIBdb.pas) почему-то имеется синтаксическая ошибка — после объявления функции в конце пропущена точка с запятой. Косяк разработчиков, не Lazarus’а. Придётся исправлять самостоятельно.

4) Почти во всех модулях из папки Include имеются ссылки (в секции Uses) на модули OleCtrls и StdVCL, которые отсутствуют в Lazarus’е. Первый можно заменить на Ole2 (судя по составу; по крайней мере, кушает успешно), а вторую ссылку можно вобще удалить.

5) Ресурсы. Примеры из SDK имеют объявления вида

{$R ‘Cube2.res‘ ‘Cube2.rc’}

и Lazarus ругается на отсутствующий файл *.res. Лечится удалением неправильного объявления с *.res (т.е. получается {$R ‘Cube2.rc’}).

6) Ещё ресурсы. Для примеров из SDK выдаётся сообщение вида

gaykaLT.lpr(35,1) Error: Error while compiling resources. Compile with -vd for more details. Check for duplicates.

Оказалось, что в примерах из SDK то ли не правильная структура файла *.rc, то ли всётаки не их вина… В общем, сработала следующая методика. 1) Файл *.rc из примера переименовываем в *.dat. 2) Создаём текстовый файл XXX.rc (где XXX — название проекта, или же как он указан у вас в ссылке $R), с единственной строкой вида

MYDATA RCDATA «XXX.dat»

, где XXX — см. выше, имя файла *.dat.
После этого линковщик успешно линкует ресурсы. Вроде бы — по крайней мере, не ругается.

7) Если проект успешно скомпиллирован, начинает линковаться, но выдаёт ошибку вида

gaykaLT.lpr(35,1) Error: Undefined symbol: WSRegisterMainMenu

(далее идёт штук 40-50 ненайденных символов с префиксом WS*, и ссылаются все ошибки на конец главного файла проекта) — как пишут в Сети (и реально помогло), надо подставить ссылку в разделе Uses на модуль Interfaces. Эта ссылка, видимо, требуется только в главном файле проекта, *.lpr. Также опыт показал, что ссылки на некоторые интерфейсные модули (например, на InterfaceBase даже не в главном файле проекта, а в «главном» модуле) также устраняет данную ошибку.

8) В случае примеров из папки SDK, даже если пример успешно скомпилируется, – скорее всего, и название библиотеки в меню, и выдаваемые ею сообщения (может и названия контролов и т.п. – не тестил) будут выглядеть, как вариант «кракозябр»:

Это хуйня

В этом случае следует добавить строчку

{$codepage UTF8}

в самое начало, видимо, каждого модуля, где имеются выводимые на экран тем или иным образом строчки в кириллице.

9) [Случай только для бесплатной версии КОМПАСа – LT, хотя всем программистам стоит иметь в виду] После успешной сборки и компиляции загрузка в библиотеку выдаёт ошибку 126:

<имя файла.dll>: error 126

и затем нечто вроде «Ошибка подключения библиотеки XXX», где XXX — имя файла *.dll. В этом случае необходимо добавить в проект глобальную директиву компилятора

-d__LIGHT_VERSION__

(эта строка добавляется в Параметры проекта => Параметры компилятора => Другое). Обратите внимание, что пишется без пробела (это важно!). Как вариант, можно добавлять как обычный $DEFINE, но тогда в каждый соответствующий модуль отдельно.

10) Application.Hanlde…
Допишу потом!

Пока всё. По мере освоения SDK постараюсь описать другие грабли, костыли и косяки.
Надеюсь, кому-нибудь поможет, но уж и вы — отпишите о своих достижениях.
Также, конечно же, пишите свои варианты исправления косяков и устранения разницы между Delphi и Lazarus.

Понравилась статья? Поделить с друзьями:
  • Error while committing the transaction фсс арм лпу
  • Error while executing the query postgresql
  • Error while executing gem errno enoent
  • Error while committing the transaction postgresql
  • Error while executing gem errno eacces