Mason Wheeler
Mason Wheeler

Reputation: 84540

Delphi: Required package not found

I'm trying to build 3 packages, A, B and C. A defines some base classes that are used in B and C. I've got all 3 of them in the same project group, all set up to output to the same custom BPL output folder. This folder is in the search path for B and C. But when I go to build B and C, the compiler chokes on the Requires list. "Required package 'A' not found."

How do I tell B and C where to find A so they'll build correctly?

Upvotes: 15

Views: 47730

Answers (7)

Nashev
Nashev

Reputation: 635

Official Delphi advice for this case (from related page at DocWiki) is to check existence of folder with related *.dcp file in a Library path option. And obviously fix it.

Upvotes: -1

Daniel Marschall
Daniel Marschall

Reputation: 3879

For me, this error happened when package "A" was built using 32 bit, but package "B" (which requires package "A") was trying to build using 64 bit.

The DCP and BPL files were all there (just in the wrong architecture), so the error message was very confusing.

Upvotes: 1

Shannon Matthews
Shannon Matthews

Reputation: 10358

I sometimes receive the "package not found" error when adding required packages via the Delphi Project Manager context menu. (Open a package, right click "Requires", choose "Add Reference..." command)

Instead it's easier to add the required package by editing the package project file manually:

  1. Select the package in the Project Manager. MyPackage.bpl for example.
  2. Ctrl+V to open the project file.
  3. Add the required package to the requires clause.
  4. Ensure the required package *.DCP file is in the package search path.

Upvotes: 0

Karakurt
Karakurt

Reputation: 41

It is possible that the name of the required package is incorrectly specified in the 'requires' clause of the package you are trying to compile. Let's take an example:

We have two packages - VirtualTreesR.dpk and VirtualTreesD.dpk. VirtualTreesD requires VirtualTreesR. They both have the '16' suffix, so they both are displayed in the Delphi project manager window as VirtualTreesR16.bpl and VirtualTreesD16.bpl. You may think that these are the names of the packages, but you are wrong. The names of the packages are still VirtualTreesR and VirtualTreesD, not VirtualTreesR16 and VirtualTreesD16.

When VirtualTreesR.dpk is compiled Delphi produces two files (I don't talk about DCUs here) VirtualTreesR*16*.bpl and VirtualTreesR.dcp. See the difference?

Then we attempt to compile VirtualTreesD.dpk and get the error: "[DCC Fatal Error] VirtualTreesD.dpk(35): E2202 Required package 'VirtualTreesR16' not found".

The error happens because the 'requires' clause of the VirtualTreesD.dpk package contains the following lines:


    requires
      designide,
      VirtualTreesR16;

Delphi tries to find VirtualTreesR16.dcp and fails even if the Delphi search path and the PATH environment variable are set correctly because there is no VirtualTreesR16.dcp. Only VirtualTreesR.dcp.

The solution is to fix the 'requires' clause so it will look like the one below:


    requires
      designide,
      VirtualTreesR;

Hope it helps.

P.S. This a quite frustrating issue because this name mismatch is not obvious and its fragments are scattered across different settings. Delphi could be more specific if it specified what file exactly it tried to find (e.g. 'VirtualTreesR.dcp' instead of 'VirtualTreesR').

Upvotes: 4

Ondrej Kelle
Ondrej Kelle

Reputation: 37211

If this happens when the IDE is trying to load a package: your package output directory (where the *.bpl files go) has to be on your system's PATH environment variable. Packages are statically linked DLLs, Windows has to be able to find them to load them.

If this happens when building the packages: any/all of your DCP output directories (where the *.dcp files go) have to be in the dependent projects' search path so that the compiler can find the compiled packages. You can also leave the DCP output directory of the package project empty - in which case the global DCP output directory set in Tools\Options\Library is used; the dependent projects then don't need to include it in their search path.

Upvotes: 9

MikeJ
MikeJ

Reputation: 14565

I would check to make sure where you are writing the .dcp files for the packages. once you have this, check that the search path of each package has an entry for the .dcp output folder.

Upvotes: 2

Toon Krijthe
Toon Krijthe

Reputation: 53366

Either the package can't be found, or the compiler is confused. In the later case, a restart sometimes helps. Then a manual build from all packages in order.

If it really can't be found, check if all package (bpl and dcp) and dcu files are available. You need both.

Upvotes: 14

Related Questions