Sergei I. Gorelkin писал(а):Можно еще предположить, что где-то на машине есть еще один модуль u8base, который находится раньше, чем тот, который нужно. Это можно проверить путем компиляции с ключом -va и поиска упоминаний проблемного модуля в полученной простыне.
Старая версия u8base, без U8Symb, лежала в домашней папке. Я только что обратил внимание (надо было сразу дать полный вывод компилятора):
- Код: Выделить всё
Free Pascal Compiler version 2.4.0 [2010/05/19] for x86_64
Copyright (c) 1993-2009 by Florian Klaempfl
Target OS: Linux for x86-64
Compiling /home/sergey/Progs/pc/picalc.pas
Compiling u8base.pas
Compiling /home/sergey/Progs/pc/picalclib.pas
picalc.pas(21,28) Error: Identifier not found "U8Symb"
picalc.pas(26,26) Error: Identifier not found "U8Symb"
picalc.pas(156) Fatal: There were 2 errors compiling module, stopping
Fatal: Compilation aborted
Error: /usr/bin/ppcx64 returned an error exitcode (normal if you did not specify a source file to be compiled)
Compiling u8base.pas без пути.
Но я был твёрдо убеждён (хотя не знаю, почему), что если путь к пользовательскому модулю не прописан в uses (кстати, совсем забыл об этом), то компилятор начинает искать его с папки, в которой находится программа. А посмотрел "простыню":
- Код: Выделить всё
[0.036] Compiling /home/sergey/Progs/pc/picalc.pas
[0.037] Searching file /home/sergey/Progs/pc/picalc.pas... found
2 142/768 Kb Used
[0.037] Handling switch "$MODE"
[0.037] Macro defined: FPC_OBJFPC
[0.037] Registering new unit SYSTEM
[0.037] Load from PICALC (implementation) unit SYSTEM
[0.037] Loading unit SYSTEM
[0.037] Unitsearch: system.ppu
[0.040] Searching file system.ppu... not found
[0.041] Searching file SYSTEM.PPU... not found
[0.041] Unitsearch: /home/sergey/Progs/pc/system.ppu
[0.041] Searching file /home/sergey/Progs/pc/system.ppu... not found
[0.041] Searching file /home/sergey/Progs/pc/SYSTEM.PPU... not found
[0.041] Unitsearch: system.pp
[0.041] Searching file system.pp... not found
[0.041] Searching file SYSTEM.PP... not found
[0.041] Unitsearch: system.pas
[0.041] Searching file system.pas... not found
[0.041] Searching file SYSTEM.PAS... not found
[0.041] Unitsearch: /home/sergey/Progs/pc/system.pp
[0.041] Searching file /home/sergey/Progs/pc/system.pp... not found
[0.041] Searching file /home/sergey/Progs/pc/SYSTEM.PP... not found
[0.041] Unitsearch: /home/sergey/Progs/pc/system.pas
[0.041] Searching file /home/sergey/Progs/pc/system.pas... not found
[0.041] Searching file /home/sergey/Progs/pc/SYSTEM.PAS... not found
[0.041] Unitsearch: ./Progs/pc/system.ppu
[0.042] Searching file ./Progs/pc/system.ppu... not found
[0.042] Searching file ./Progs/pc/SYSTEM.PPU... not found
[0.042] Unitsearch: ./Progs/pc/system.pp
[0.042] Searching file ./Progs/pc/system.pp... not found
[0.042] Searching file ./Progs/pc/SYSTEM.PP... not found
[0.042] Unitsearch: ./Progs/pc/system.pas
[0.042] Searching file ./Progs/pc/system.pas... not found
[0.042] Searching file ./Progs/pc/SYSTEM.PAS... not found
[0.042] Unitsearch: /usr/lib64/fpc/2.4.0/units/x86_64-linux/rtl/system.ppu
[0.047] Searching file /usr/lib64/fpc/2.4.0/units/x86_64-linux/rtl/system.ppu... found
компилятор не только мои модули, но даже system.ppu пытается сначала найти в домашнем каталоге, потом переходит к папке с программой, а находит (вот сюрприз-то) в
/usr/lib64/fpc/2.4.0/units/x86_64-linux/rtl/Почему так?
Добавлено спустя 10 часов 48 минут 41 секунду:По крайней мере с последовательностью поиска разобрался. Компилятор начинает с текущей папки, потом переходит к папке с исходником программы, далее к папке с собственным бинарником, и в последнюю очередь ищет в папках, указанных в unit search path. В терминале Linux, если не поменять с помощью cd, текущая папка и есть домашняя папка пользователя.
В общем, понял, что язык языком, а как компилятор работает, тоже знать надо.
P.S. Спасибо всем, кто откликнулся.