Фатальная ошибка компиляции в безошибочном модуле

Вопросы программирования и использования среды Lazarus.

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

Ответить
SII
новенький
Сообщения: 64
Зарегистрирован: 24.06.2007 17:15:09
Откуда: Зеленоград

Фатальная ошибка компиляции в безошибочном модуле

Сообщение SII »

Я начал делать одну программу на Дельфи 2006, но обнаружил, что VCL не поддерживает Unicode (не знал этого, потому что раньше нужды не было), поэтому решил попробовать Free Pascal и Lazarus.

Однако при попытке скомпилировать один из модулей, носящий у меня имя Trees (там самопальная реализация двоичных деревьев) в Lazarus на первой же строчке кода (unit Trees) выползла очень странная ошибка:

Trees.pas(1,1) Fatal: Can't find unit zdeflate

Никаких zdeflate я не использую. Более того, когда я на этот модуль "натравил" FPC (указав в параметрах только -S2), он благополучно скомпилировался в полном объёме. В общем, я понял, что ничего не понимаю :)

Пы.Сы. Проект целиком пока скомпилировать в FPC нельзя -- я там использовал модули Delphi для работы с XML, которых здесь пока нет. Однако ошибка там выползает именно та, что должна быть, и в том модуле, где она есть; Trees же использует только SysUtils.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

Trees - это один из модулей стандартного пакета paszlib. Оттуда же и модуль zdeflate. Тут дешевле всего переименовать свой модуль во что-нибудь другое. Можно, конечно, попытаться настраивать пути поиска, но боюсь, ничем хорошим это не кончится.
SII
новенький
Сообщения: 64
Зарегистрирован: 24.06.2007 17:15:09
Откуда: Зеленоград

Сообщение SII »

Спасибо, помогло :)

Мелькала у меня мысля, что Trees мог оказаться стандартным модулем, но не думал, что поиск будет выполняться сначала среди стандартных модулей, а потом среди моих. ИМХО, разумнее как раз наоборот -- ведь имена модулей не являются зарезервированными словами языка...
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

Сначала ищутся скомпилированные модули (.ppu), а уже потом исходники к ним. Если исходники не изменялись с момента создания .ppu, то модуль не пересобирается. Исходники "стандартных" модулей компилятор без явного указания пути найти не может - это сделано для того, чтобы он не пытался пересобирать их по собственной инициативе. Компилятор находит "стандартный" trees.ppu и ваш trees.pas. Дальше, я думаю, понятно...
SII
новенький
Сообщения: 64
Зарегистрирован: 24.06.2007 17:15:09
Откуда: Зеленоград

Сообщение SII »

Что происходит дальше, конечно, понятно. Непонятно только, почему разработчики компилятора применили столь странный механизм. ИМХО, резоннее было бы искать сначала в каталоге проекта, и при обнаружении там хоть откомпилированного модуля, хоть его исходника использовать именно его...
Ответить