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

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

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

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

Сообщение SII » 24.06.2007 17:25:40

Я начал делать одну программу на Дельфи 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.
SII
новенький
 
Сообщения: 64
Зарегистрирован: 24.06.2007 17:15:09
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin » 24.06.2007 18:27:37

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

Сообщение SII » 24.06.2007 19:23:00

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

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

Сообщение Sergei I. Gorelkin » 24.06.2007 21:19:48

Сначала ищутся скомпилированные модули (.ppu), а уже потом исходники к ним. Если исходники не изменялись с момента создания .ppu, то модуль не пересобирается. Исходники "стандартных" модулей компилятор без явного указания пути найти не может - это сделано для того, чтобы он не пытался пересобирать их по собственной инициативе. Компилятор находит "стандартный" trees.ppu и ваш trees.pas. Дальше, я думаю, понятно...
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1405
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение SII » 25.06.2007 00:18:10

Что происходит дальше, конечно, понятно. Непонятно только, почему разработчики компилятора применили столь странный механизм. ИМХО, резоннее было бы искать сначала в каталоге проекта, и при обнаружении там хоть откомпилированного модуля, хоть его исходника использовать именно его...
SII
новенький
 
Сообщения: 64
Зарегистрирован: 24.06.2007 17:15:09
Откуда: Зеленоград


Вернуться в Lazarus

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

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

Рейтинг@Mail.ru