Delphi: требуемый пакет не найден
Я пытаюсь построить 3 пакета, A, B и C. A определяет некоторые базовые классы, которые используются в B и C. У меня есть все 3 из них в одной и той же группе проектов, все настроены на вывод к той же пользовательской папке вывода BPL. Эта папка находится в пути поиска для B и C. Но когда я иду на сборку B и C, компилятор задыхается в списке Requires. Msgstr "Требуемый пакет" A "не найден."
Как сообщить B и C, где найти A, чтобы они правильно построили?
Ответы
Ответ 1
Либо пакет не может быть найден, либо компилятор запутан. В более позднем случае иногда помогает перезапуск. Затем ручная сборка из всех пакетов по порядку.
Если это действительно невозможно найти, проверьте, доступны ли все файлы (bpl и dcp) и dcu. Вам нужны оба.
Ответ 2
Если это происходит, когда среда IDE пытается загрузить пакет: папка вывода пакета (куда идут файлы .bpl) должна находиться в вашей переменной среды PATH системы. Пакеты представляют собой статически связанные DLL файлы, Windows должна найти их для их загрузки.
Если это происходит при создании пакетов: все/все ваши выходные каталоги DCP (куда идут файлы .dcp) должны находиться в пути поиска зависимых проектов, чтобы компилятор мог найти скомпилированные пакеты.
Вы также можете оставить выходной каталог DCP проекта пакета пустым - в этом случае используется глобальный каталог вывода DCP, установленный в Tools\Options\Library; зависимые проекты затем не должны включать его в свой путь поиска.
Ответ 3
Возможно, что имя требуемого пакета указано неверно в предложении 'require' пакета, который вы пытаетесь скомпилировать. Возьмем пример:
У нас есть два пакета - VirtualTreesR.dpk и VirtualTreesD.dpk. VirtualTreesD требует VirtualTreesR. Оба они имеют суффикс "16", поэтому оба они отображаются в окне менеджера проектов Delphi как VirtualTreesR16.bpl и VirtualTreesD16.bpl. Вы можете подумать, что это имена пакетов, но вы ошибаетесь. Имена пакетов по-прежнему являются VirtualTreesR и VirtualTreesD, а не VirtualTreesR16 и VirtualTreesD16.
При компиляции VirtualTreesR.dpk Delphi создает два файла (здесь я не говорю о DCU) VirtualTreesR * 16 *.bpl и VirtualTreesR.dcp. Увидеть разницу?
Затем мы пытаемся скомпилировать VirtualTreesD.dpk и получить ошибку: "[DCC Fatal Error] VirtualTreesD.dpk(35): E2202 Требуемый пакет" VirtualTreesR16 "не найден".
Ошибка происходит из-за того, что в предложении "require" пакета VirtualTreesD.dpk содержатся следующие строки:
requires
designide,
VirtualTreesR16;
Delphi пытается найти VirtualTreesR16.dcp и не удается, даже если путь поиска Delphi и переменная среды PATH установлены правильно, потому что VirtualTreesR16.dcp не существует. Только VirtualTreesR.dcp.
Решение состоит в том, чтобы исправить предложение 'require', чтобы оно выглядело следующим образом:
requires
designide,
VirtualTreesR;
Надеюсь, что это поможет.
P.S. Это довольно неприятная проблема, потому что это несоответствие имени не очевидно, и его фрагменты разбросаны по разным настройкам. Delphi может быть более конкретным, если он указал, какой файл именно он пытался найти (например, "VirtualTreesR.dcp" вместо "VirtualTreesR" ).
Ответ 4
Я бы проверял, где вы пишете файлы .dcp для пакетов. если у вас есть это, проверьте, что в пути поиска каждого пакета есть запись для выходной папки .dcp.
Ответ 5
Я иногда получаю ошибку "package not found" при добавлении необходимых пакетов через контекстное меню Delphi Project Manager. (Откройте пакет, щелкните правой кнопкой мыши "Требуется", выберите команду "Добавить ссылку..." )
Вместо этого проще добавить требуемый пакет, отредактировав файл проекта пакета вручную:
- Выберите пакет в Менеджере проектов.
MyPackage.bpl
например.
-
Ctrl+V
, чтобы открыть файл проекта.
- Добавьте требуемый пакет в раздел require.
- Убедитесь, что требуемый пакет *. DCP файл находится в пути поиска пакета.