Difference between revisions of "Unit not found - How to find units/fr"

From Free Pascal wiki
Jump to navigationJump to search
 
(6 intermediate revisions by the same user not shown)
Line 13: Line 13:
 
* fichier '''.ppu''' : C'est le lieu de support pour toute unité compilée en Pascal, créé par le compilateur Free Pascal .
 
* fichier '''.ppu''' : C'est le lieu de support pour toute unité compilée en Pascal, créé par le compilateur Free Pascal .
  
== Step 1: Compiler or IDE or both ==
+
== Étape  1: Compilateur ou  IDE ou tous les deux  ==
  
The first step is to find out, if the IDE can not find the unit, or the compiler can not find it or both.
+
La première étape est de découvrir , si l'IDE ne peut pas trouver l'unité, ou le compilateur ne peut pas la trouver ou les deux .
  
Although the compiler and the IDE are using quite similar search algorithms to find a unit, there are some differences. That's why sometimes the IDE can find a unit, which the compiler can not and vice versus. If the compiler can not find it, the compilation fails (Build, Ctrl+F9) with the error 'unit not found'. If the IDE can not find, the code tools will fail. For example ''Find Declaration'' (Alt+Up or Ctrl+Left mouse button) or ''Identifier completion'' (Ctrl+Space) will fail with the same error 'unit not found'.
+
Bien que  le compilateur et l'IDE emploient les algorithmes tout à fait semblables de recherche pour trouver une unité , il y a quelques différences . C'est pourquoi parfois l'IDE peut trouver une unité, que le compilateur ne peut pas et vice versa. Si le compilateur ne peut pas la trouver, la compilation échoue (Construire, Ctrl+F9) avec l'erreur  'unit not found'. Si l'IDE ne peut la pas trouver, les outils de code échoueront. Par exemple  ''Find Declaration'' (Alt+Up ou les bouttons de la sourie Ctrl+Left) ou ''Identifier completion'' (Ctrl+Space) échoueront avec la même erreur  'unit not found'.
  
Common:
+
'''En commun :'''
* Both search units in the search path.  
+
 
* Both search first for pascal sources (.pas, .pp) files. Under MacPAS mode: search for .p files too.
+
* Tous les deux recherchent des unités dans le chemin de recherche .  
* Both search for several cases: normal case, lower case, upper case. For example: if the uses section contains 'Unit1', then it searches:
+
* Tous les deux recherchent d'abord des fichiers sources pascal (.pas, .pp). Sous le mode MacPAS: recherche aussi des fichiers .p .
 +
* Tous les deux recherchent plusieurs casses : la casse normale, les minuscules, les majuscules. Par exemple: si la section uses contient 'Unit1', alors il recherche :
 
   1. Unit1.pp
 
   1. Unit1.pp
 
   2. unit1.pp
 
   2. unit1.pp
Line 29: Line 30:
 
   5. unit1.pas
 
   5. unit1.pas
 
   6. UNIT1.PAS
 
   6. UNIT1.PAS
They are searched in every directory of the search path.
+
Ils sont recherchés dans chaque répertoire du chemin de recherche.
 +
 
 +
'''Différences :'''
  
Differences:
+
* FPC emploie le fichier fpc.cfg pour les chemins de recherche additionnels. L'IDE les emploie pour trouver seulement les fichiers des sources de FPC. Ajouter ainsi un chemin de recherche au fichier fpc.cfg est ignoré par Lazarus.
* FPC uses the fpc.cfg for additional search paths. The IDE uses them only to find files of the FPC sources. So adding a search path to the fpc.cfg is ignored by Lazarus.
+
* FPC débute toujours dans un répertoire et chaque nom de fichier relatif l'est à ce répertoire. Pour l'IDE Lazarus chaque projet et chaque paquet a son propre répertoire de base. Ainsi le chemin de recherche d'un paquet est relatif au répertoire  du paquet. Le répertoire du paquet est le répertoire du fichier .lpk. Le répertoire de base d'un projet est le fichier source principal du projet (par exemple le fichier .lpr). S'il n'y a aucun fichier source principal, le répertoire du fichier .lpi est pris. Normalement tous les deux sont identiques et l'IDE n'a aucune interface graphique à dédoubler. Mais en éditant le fichier .lpi manuellement vous pouvez les dédoubler. En ce moment il y a seulement un exemple proéminant pour ce cas : les fichiers ppxxx.lpi du compilateur Free Pascal.
* FPC always starts in one directory and every relative filename is relative to this directory. For the Lazarus IDE each project and each package has its own base directory. So the search path of a package is relative to the package directory. The package directory is the directory of the .lpk file. The base directory of a project is the projects main source file (e.g. the .lpr file). If there is no main source file, the directory of the .lpi file is taken. Normally both are the same and the IDE has no graphical frontend to split. But by editing the .lpi file manually you can split them. At the moment there is only one prominent example for this case: the ppxxx.lpi files of the Free Pascal compiler.
+
* FPC et  Lazarus ont des macros différentes.
* FPC and Lazarus have different macros.
+
* Vous pouvez définir des chemins de recherche de source additionnels pour l'IDE, qui ne sont pas donnés au compilateur . (Projet -> Options du compilateur... -> Autre)
* You can define additional source search paths for the IDE, which are not given to the compiler. (Compiler options -> Other source files)
 
  
== Case 1: Both can not find a unit==
+
== Cas  1: Tous les deux ne peuvent pas trouver une unité ==
  
* '''Check if the unit exists''': If not, then see chapter Searching packages, projects of a unit (ToDo: write me).
+
* '''Vérifier si l'unité existe ''': Si non, voir alors le chapitre rechercher des paquets , des projets d'une unité (ToDo: m'écrire ).
* '''Check if the unit is readable''': (You can open it in the IDE). A unit source does not need to be writable. If not, then fix the permissions or get a readable copy.
+
* '''Vérifier si l'unité est lisible ''': (Vous pouvez l'ouvrir dans  IDE). Une unité source n'a pas besoin d'avoir la possibilité d'y écrire . Si non, alors fixer les permissions ou obtenir une copie lisible .
* '''Check if the unit has a valid pascal name''': (identifier plus extension). Valid examples: unit1.pas, Bogus2.pp, _1.pas, LAZ.PAS. Wrong examples: 1.pas (starts with number), a%.pas (contains special character), unit.PAS (extension uppercase, but filename lowercase).
+
* '''Vérifier si l'unité a un nom valide Pascal ''': (marque plus l'extension). Exemples valides : unit1.pas, Bogus2.pp, _1.pas, LAZ.PAS. Exemples faux : 1.pas (démarre avec un nombre ), a%.pas (contient des caractères spéciaux), unit.PAS (extension en majuscule, mais le nom du fichier en minuscules).
* '''Check if directory name contains special characters'''
+
* '''Vérifier si le nom du répertoire contient des caractères spéciaux '''
 
<pre>
 
<pre>
 
   1. slashes / and backslashes \ are used as directory delimiter and should never be used for directory names
 
   1. slashes / and backslashes \ are used as directory delimiter and should never be used for directory names

Latest revision as of 21:47, 25 June 2007

Deutsch (de) English (en) français (fr) magyar (hu)

Vue d'ensemble

Cette page est à propos d'une des plus proéminantes erreurs de pascal: unité non trouvée ou ne peut pas trouver l'unité . Cette erreur a beaucoup de raisons et cette page essaye de recueillir la plupart des raisons, comment découvrir , quel problème c'est, et comment le résoudre .

Notations, termes

  • fichier .pas: C'est le lieu de support pour toute source d'unité Pascal. Par exemple unit1.pas ou unit1.pp. On permet les deux extensions et il n'y a aucune différence. Il y a d'autres compilateurs, qui ignorent les fichiers .pp, mais cette page est au sujet du compilateur free Pascal.
  • fichier .pp: Même que .pas. Juste une autre extension pour la même chose .
  • fichier .p : Mêmes que .pas. Juste une autre extension pour la même chose .Généralement utilisé sur Macintosh.
  • fichier .ppu : C'est le lieu de support pour toute unité compilée en Pascal, créé par le compilateur Free Pascal .

Étape 1: Compilateur ou IDE ou tous les deux

La première étape est de découvrir , si l'IDE ne peut pas trouver l'unité, ou le compilateur ne peut pas la trouver ou les deux .

Bien que le compilateur et l'IDE emploient les algorithmes tout à fait semblables de recherche pour trouver une unité , il y a quelques différences . C'est pourquoi parfois l'IDE peut trouver une unité, que le compilateur ne peut pas et vice versa. Si le compilateur ne peut pas la trouver, la compilation échoue (Construire, Ctrl+F9) avec l'erreur 'unit not found'. Si l'IDE ne peut la pas trouver, les outils de code échoueront. Par exemple Find Declaration (Alt+Up ou les bouttons de la sourie Ctrl+Left) ou Identifier completion (Ctrl+Space) échoueront avec la même erreur 'unit not found'.

En commun :

  • Tous les deux recherchent des unités dans le chemin de recherche .
  • Tous les deux recherchent d'abord des fichiers sources pascal (.pas, .pp). Sous le mode MacPAS: recherche aussi des fichiers .p .
  • Tous les deux recherchent plusieurs casses : la casse normale, les minuscules, les majuscules. Par exemple: si la section uses contient 'Unit1', alors il recherche :
 1. Unit1.pp
 2. unit1.pp
 3. UNIT1.PP
 4. Unit1.pas
 5. unit1.pas
 6. UNIT1.PAS

Ils sont recherchés dans chaque répertoire du chemin de recherche.

Différences :

  • FPC emploie le fichier fpc.cfg pour les chemins de recherche additionnels. L'IDE les emploie pour trouver seulement les fichiers des sources de FPC. Ajouter ainsi un chemin de recherche au fichier fpc.cfg est ignoré par Lazarus.
  • FPC débute toujours dans un répertoire et chaque nom de fichier relatif l'est à ce répertoire. Pour l'IDE Lazarus chaque projet et chaque paquet a son propre répertoire de base. Ainsi le chemin de recherche d'un paquet est relatif au répertoire du paquet. Le répertoire du paquet est le répertoire du fichier .lpk. Le répertoire de base d'un projet est le fichier source principal du projet (par exemple le fichier .lpr). S'il n'y a aucun fichier source principal, le répertoire du fichier .lpi est pris. Normalement tous les deux sont identiques et l'IDE n'a aucune interface graphique à dédoubler. Mais en éditant le fichier .lpi manuellement vous pouvez les dédoubler. En ce moment il y a seulement un exemple proéminant pour ce cas : les fichiers ppxxx.lpi du compilateur Free Pascal.
  • FPC et Lazarus ont des macros différentes.
  • Vous pouvez définir des chemins de recherche de source additionnels pour l'IDE, qui ne sont pas donnés au compilateur . (Projet -> Options du compilateur... -> Autre)

Cas 1: Tous les deux ne peuvent pas trouver une unité

  • Vérifier si l'unité existe : Si non, voir alors le chapitre rechercher des paquets , des projets d'une unité (ToDo: m'écrire ).
  • Vérifier si l'unité est lisible : (Vous pouvez l'ouvrir dans IDE). Une unité source n'a pas besoin d'avoir la possibilité d'y écrire . Si non, alors fixer les permissions ou obtenir une copie lisible .
  • Vérifier si l'unité a un nom valide Pascal : (marque plus l'extension). Exemples valides : unit1.pas, Bogus2.pp, _1.pas, LAZ.PAS. Exemples faux : 1.pas (démarre avec un nombre ), a%.pas (contient des caractères spéciaux), unit.PAS (extension en majuscule, mais le nom du fichier en minuscules).
  • Vérifier si le nom du répertoire contient des caractères spéciaux
  1. slashes / and backslashes \ are used as directory delimiter and should never be used for directory names
  2. dollar $ is used for macros in many scripting languages
  • Check for right case: If your unit name is all lowercase or all uppercase you don't need to worry. If not, then you must make sure, that every uses section in every source code uses exactly this case. For example: if your unit is named Unit1.pas, then every uses section must use Unit1. This is not so important under windows, but under any other platform (Linux, MacOSX). The IDE gives warnings when saving files with mixed case.
  • Check if the unit is in the search path. ToDo: write me

Case 2: Compiler finds a unit, but IDE does not

The next sub cases assumes, that Run -> Build (Ctrl+F9) in the Lazarus IDE works, but Find Declaration fails with the error: unit not found. If unsure, check Case 1 as well.

  • Check if the unit source exists: The IDE searches for pascal source (.pas, .pp) and ignores the .ppu files. The compiler can use a .ppu, but the Lazarus IDE not. This feature is planned, but there is no time frame.
  • Check if unit directory was added to your fpc.cfg: The compiler uses all paths defined in the fpc.cfg file. The IDE does not read this file. Add the search path to the compiler options of your projects and/or packages.
  • Check for macros and special compiler flags: The compiler understands the asterisk * character in search paths. The IDE treats this character as normal character. You can add the -Fu, -FU, -FE flags manually to the custom compiler flags in the lazarus IDE, but they are not parsed. Always use the right fields for options. The custom options are only for flags like the -D flag or uncommon compiler options, like new features of the unstable developer compiler.

Case 3: IDE finds a unit, but compiler does not

This is the case, when Find Declaration finds the unit, but building (Ctrl+F9) fails.

There are two cases: Either the compiler didn't find anything, or it does not like, what it found. In both cases it returns the same error: unit xyz not found.

Case 3.1: The compiler finds the .ppu file, but does not like it

This can happen, when the found .ppu file is older than a required unit (.pas, .pp or .ppu). For example if unit1 uses unit2 and unit2 was changed, then unit1 needs to be recompiled as well.

It can also happen, if you installed newer files without deleting the old ones. The compiler stops at the first found.

You can see, what the compiler finds and what is missing by giving the -vt command line switch. But this gives a lot of output and it is hard to read for newbies.

The easiest way is often to first recompile the packages and project clean (Build all). In case of the Lazarus sources itself: The configure build lazarus dialog has a button to setup all options for a clean build.

Case 3.2: The compiler does not find neither source (.pas, .pp) nor .ppu file

In this case you have to extend the search path. The question is: Adding the .ppu directory or the source directory?

WARNING: If you add the wrong search path, it can happen, that the compiler will create multiple copies of files and you will later get the 'unit not found' error of Case 3.1.

Many projects and packages have distinct source directories (.pas, .pp) and output directories (.ppu). If a package has an output directory, then only this directory should be added to the search path of any depending project and/or package. The IDE will do this automatically. For example: Adding the LCL as dependency to your project adds two output directories to your unit search path. You can see this in Compiler Options -> Inherited. Never add any other LCL directory to your search paths or you will get Case 3.1 errors.

  • Check if the unit is in the compiler search path: The search path given to the compiler are the -Fu options of the command line parameters. You can see the options given to the compiler in Compiler Options -> Show Options.