Difference between revisions of "Lazarus Faq/fr"

From Free Pascal wiki
Jump to navigationJump to search
m (Fixed syntax highlighting; deleted category included in page template)
 
(136 intermediate revisions by 3 users not shown)
Line 7: Line 7:
 
=== Où puis-je trouver plus de FAQ ? ===
 
=== Où puis-je trouver plus de FAQ ? ===
  
Voir le [http://www.lazarus.freepascal.org site web officiel]. Il y a une autre FAQ aussi.
+
Voir le [http://www.lazarus.freepascal.org site Web officiel]. Il y a une autre FAQ aussi sur ce site.
  
=== Qu'est Lazarus ? ===
+
=== Qu'est-ce que Lazarus ? ===
  
Lazarus est environnement de développement intégré (EDI) multi plate-forme qui peremt de créer des programmes en Pascal Objet visuels ou non, qui utilise le compilateur Free Pascal pour créer votre exécutable. Son but est ''d'écrire et de compiler partout'' : vous devriez pouvoir recompiler votre programme source avec un Lazarus tournant sur un système d'exploitation (ou avec un compilateur croisé et obtneir un programme qui s'exécute sur ce système d'exploitation.
+
Lazarus est environnement de développement intégré (EDI) multiplateforme qui permet de créer des programmes en Pascal Objet, visuels ou non. Il utilise le compilateur Free Pascal pour créer les exécutables. Son but est ''d'écrire et de compiler partout'' : vous devriez pouvoir recompiler votre programme source avec un Lazarus tournant sur un système d'exploitation supporté(ou avec un compilateur croisé) et obtenir un programme qui s'exécute sur ce système d'exploitation.
  
 
Pour de plus amples informations, voir le survol de Free Pascal et Lazarus.
 
Pour de plus amples informations, voir le survol de Free Pascal et Lazarus.
  
===Pourquoi les fichiers binaires produits sont si grands ?===
+
===Pourquoi les fichiers binaires produits sont-ils si volumineux ?===
Les fichiers binaires sont grands parce qu'ils contiennent beaucoup d'informations de débogage nécessaires à l'utilisation de gdb (GNU Debugger).
+
Les fichiers binaires sont volumineux parce qu'ils contiennent beaucoup d'informations de débogage nécessaires à l'utilisation de gdb (GNU Debugger).
  
Le compilateur a une option pour enlever l'information de débogage de l'exécutable (-Xs),mais en raison d'un bogue dans le compilateur (version 2.0.2 et antérieures), ceci ne fonctionne pas correctement . Cela a été fixé dans la version de développement du compilateur .
+
Le compilateur a une option pour enlever l'information de débogage de l'exécutable (-Xs). En raison d'un bogue dans le compilateur (version 2.0.2 et antérieures), ceci ne fonctionnait pas correctement. Ce problème a été corrigé dans la version de développement du compilateur.
  
Vous pouvez utiliser un programme nommé  "strip" pour enlever les symboles de deboggage du fichier exécutable. Il est situé sous le répertoire de Lazarus  lazarus\pp\bin\i386-win32\.
+
Vous pouvez utiliser un programme nommé  "strip" pour enlever les symboles de débogage du fichier exécutable. Il est situé sous le répertoire de Lazarus  lazarus\pp\bin\i386-win32\.
  
Tapez juste "strip --strip-all <votre fichier exécutable avec le chemin >" sur la ligne de commande .
+
Tapez simplement "strip --strip-all <votre fichier exécutable avec le chemin >" sur la ligne de commande.
  
Si vous voulez rendre votre programme encore plus petit , vous devriez essayer  [http://upx.sourceforge.net/ UPX] aussi . UPX est un très bon compresseur d'exe. It includes no memory overhead due to in-place decompression. Il a également une décompression très rapide (~10 MB/sec sur un Pentium  133).
+
Si vous voulez rendre votre programme encore plus petit, vous devriez essayer  [http://upx.sourceforge.net/ UPX] aussi. UPX est un très bon compresseur d'exécutables. Il n'aboutit pas à une surconsommation liée à la décompression sur place. Il bénéficie également d'une décompression très rapide (~10 MB/sec sur un Pentium  133).
  
Pour employer upx tapez juste "upx <votre fichier exécutable avec le chemin>" sur la ligne de commande .
+
Pour employer UPX, tapez simplement "upx <votre fichier exécutable avec le chemin>" sur la ligne de commande.
  
après avoir employé à la fois  strip et upx un simple GUI programmé avec Lazarus donne:
+
Après avoir employé à la fois  strip et upx, un simple GUI programmé avec Lazarus donne :
 
* ~ 700kb sur Linux
 
* ~ 700kb sur Linux
 
* ~ 420kb sur Windows
 
* ~ 420kb sur Windows
Line 34: Line 34:
 
Une réponse plus détaillée avec les inconvénients d'utiliser UPX est donnée sur [[Size Matters/fr|Considérations de taille]].
 
Une réponse plus détaillée avec les inconvénients d'utiliser UPX est donnée sur [[Size Matters/fr|Considérations de taille]].
  
Il est également important de noter que le logiciel "bonjour le monde" de lazarus inclut déjà une quantité énorme de fonctionnalisés . Il inclut :
+
Il est également important de noter que le logiciel "bonjour le monde" de Lazarus inclut déjà une quantité énorme de fonctionnalisés :
  
* Une librairie de traitement XML
+
* Une librairie de traitement XML ;
* Une librairie de traitement d'images pour les fichiers png, xpm, bmp et ico  
+
* Une librairie de traitement d'images pour les fichiers png, xpm, bmp et ico ;
* Presque tous les composants graphiques de la bibliothèque de composants de Lazarus(LCL)
+
* Presque tous les composants graphiques de la bibliothèque de composants de Lazarus(LCL) ;
* Toutes les Bibliothèques Runtime de Free Pascal
+
* Toutes les Bibliothèques Runtime de Free Pascal ;
 +
* Les infos RTTI.
  
Ainsi il est très grand , mais il inclut déjà presque tout ce qu'une application non triviale du monde réel aura besoin.
 
  
La taille de l'executable Lazarus commence grand , mais se développe très lentement , en raison du compilateur Free Pascal   et la façon dont les fiches lazarus opèrent. Un projet c++ (juste un exemple , mais s'applique à d'autres langues/outils aussi ) commence très petits sur bonjour le monde, mais se développe rapidement exponentiellement quand vous avez besoin de fonctionnalités pour écrire une application non triviale .
+
Par conséquent, la taille de l'exécutable Lazarus commence grand, mais se développe très lentement en raison du compilateur Free Pascal et de la façon dont les fiches Lazarus opèrent. Un projet C++ (juste un exemple, mais cette remarque s'applique à d'autres langages/outils) commence très petit avec un programme élémentaire comme 'bonjour le monde', mais se développe exponentiellement quand vous avez besoin de fonctionnalités pour écrire une application non triviale.
  
 
[[Image:Lazarus_vs_cpp.png]]
 
[[Image:Lazarus_vs_cpp.png]]
  
=== Pourquoi le linkage est il si lent sur Windows? ===
+
'''Guide rapide pour réduire la taille des exécutables Lazarus/FPC'''
 +
* 1. Project|Compiler Options|Code|Smart Linkable (-CX) -> Coché
 +
* 2. Project|Compiler Options|Linking|Debugging| Décocher tout sauf Strip Symbols From Executable (-Xs)
 +
* 3. Project|Compiler Options|Linking|Link Style|Link Smart (-XX) -> Coché
 +
{{Note| faites cela si vous ne voulez pas déboguer}}
  
D'une manière générale, la compilation sur Windows prend plus de temps que sur d'autres plate-formes parce que l'éditeur de liens de GNU utilisé par FreePascal est lent sur cette plate-forme . Ce problème affecte seulement Windows , et est seulement mauvais sur les ordinateurs relativement vieux (moins que 1Ghz) et sur ceux avec peu de RAM  (128MB ou moins).
+
=== Ai-je besoin de ppc386.cfg ou de fpc.cfg ? ===
  
En outre, si vous liez intelligement la LCL, le linkage sera beaucoup plus lent. Une étude à ce sujet est localisée ici : [[File size and smartlinking/fr|Taille de fichier et lien intelligent]]
+
Vous avez seulement besoin de fpc.cfg. De cette façon, le compilateur saura où trouver les bibliothèques.
  
Un éditeur de liens interne a été développé , et est prêt , mais sera seulement disponible quand Free Pascal 2.2 sera réalisé (naturellement il est également disponible  via subversion). Il diminue nettement le temps linkage.
+
=== Comment compiler Lazarus ? ===
  
'''Note''': Dans la version 2.1.1 Windows emploie un éditeur de liens interne pour win32/64/ce qui accélère le processus un peu. Une recompilation de Lazarus mange alors environ 280MB.
+
Tapez quelque chose comme ceci :
 
+
$ cd lazarus
=== Ai je besoin de ppc386.cfg ou fpc.cfg? ===
+
$ make clean all
 
 
Vous avez besoin seulement de fpc.cfg. De cette façon le compilateur sait où trouver les bibliothèques .
 
  
=== Comment je compile lazarus? ===
+
Si vous voulez construire Lazarus avec un autre ensemble graphique (par exemple Qt supporté par Linux, Windows et OSX), il vous faut utiliser l'argument PLATFORM :
  
Faire quelque chose comme ça:
 
 
  $ cd lazarus
 
  $ cd lazarus
  $ make clean all
+
  $ make clean all LCL_PLATFORM=qt
  
=== Comment je construis d'autres projets basés sur la LCL ===
+
=== Comment construire d'autres projets fondés sur la LCL ? ===
  
Si vous ne pouvez pas employer l'IDE pour construire vos applications, utilisez lazbuild. C'est une version en ligne de commande de l'IDE pour construire des projets et des paquets lazarus.  
+
Si vous ne pouvez pas employer l'EDI pour construire vos applications, utilisez lazbuild. Il s'agit d'une version en ligne de commande de l'EDI pour construire des projets et des paquets Lazarus.  
Si vous voulez construire des applications LCL sans l'IDE et sans lazbuild, ajoutez les lignes suivantes à la fin de votre  ''fpc.cfg''
+
Si vous voulez construire des applications LCL sans l'EDI et sans lazbuild, ajoutez les lignes suivantes à la fin de votre  ''fpc.cfg''
  
 
   # searchpath for other toolkits (Linux)
 
   # searchpath for other toolkits (Linux)
Line 76: Line 77:
  
 
   # searchpath for other toolkits (Windows)
 
   # searchpath for other toolkits (Windows)
   -Fu/{YourLazarusDirectory}/components/units/{YourToolKit}
+
   -Fu/{YourLazarusDirectory}/components/lazutils/lib/{platform}
 +
  -Fu/{YourLazarusDirectory}/lcl/units/{platform}
 +
  -Fu/{YourLazarusDirectory}/lcl/units/{platform}/{YourToolKit}</pre>
  
:Où  {YourToolKit} peut être ''gtk2'', ''gnome'', ''qt'' ou ''win32'' et executer:
+
Où  {YourToolKit} peut être ''gtk2'', ''gnome'', ''qt'' ou ''win32''.
::ppc386 your.project.pp
 
  
'''Conseil :''' Ne pas oublier d'installer les paquets de développement pour votre trousse à outils autrement vous pourriez recevoir quelque chose comme: [[Linker message: cannot find -l/fr|Linker message: cannot find -l]].
+
Exécutez alors :
 +
  ppc386 your.project.pp
 +
 
 +
'''Conseil :''' Ne pas oublier d'installer les paquets de développement pour votre trousse à outils, sinon vous pourriez recevoir un message comme : [[Linker message: cannot find -l/fr|Linker message: cannot find -l]].
  
 
=== Quelle version de FPC est exigée ? ===
 
=== Quelle version de FPC est exigée ? ===
  
FPC Version 2.0.4 a été réalisée , et c'est la version recommandée. Vous pouvez également employer la version svn de fpc 2.0.5 et  2.1.x.
+
* Lazarus 1.0.8 nécessite au moins FPC 2.6.2.
 +
* Lazarus 1.0 nécessite au moins FPC 2.6.0.
 +
* Lazarus 1.2.0 nécessite au moins FPC 2.6.2.
 +
* Lazarus 1.2.4, 1.2.6 et 1.4 nécessitent au moins FPC 2.6.4 (dernières versions à ce jour).
  
 
=== Je ne peux pas compiler Lazarus  ===
 
=== Je ne peux pas compiler Lazarus  ===
  
# Vérifier si le compilateur a la version correcte  
+
# Vérifiez si le compilateur a la version correcte.
# Vérifier si les bibliothèques (fpc) sont de la même version .
+
# Vérifiez si les bibliothèques (fpc) sont de la même version.
# Vérifier si vous avez un fichier fpc.cfg et pas de vieux fichier ppc386.cfg
+
# Vérifiez si le chemin d'installation du compilateur contient des espaces. S'assurer qu'il n'y en a pas !
# Vérifier également les FAQs sur la dépendance par rapport aux Systèmes d'exploitations
+
# Vérifiez si vous avez un fichier fpc.cfg et pas un fichier obsolète ppc386.cfg.
 +
# Vérifiez également les FAQs sur la dépendance par rapport aux systèmes d'exploitation.
 +
# Si vous êtes encore en galère, demandez sur le forum ou dans la mailing list.
 +
 
 +
=== Comment embarquer un petit fichier dans un exécutable sans traîner un fichier séparé ? Comment embarquer une ressource ?===
 +
Les ressources Lazarus et les ressources de type Windows/FPC sont supportées.
 +
 
 +
Par exemple :
 +
/your/lazarus/path/tools/lazres sound.lrs sound1.wav sound2.wav ...
 +
va créer sound.lrs à partir de sound1.wav et de sound2.wav.
 +
 
 +
Incluez-le alors *après* le fichier lrs de la fiche:
 +
 
 +
...
 +
initialization
 +
{$i unit1.lrs} // ceci est le fichier ressource principal (en premier)
 +
{$i sound.lrs} // fichier ressource défini par l'utilisateur
 +
 +
end.
 +
 
 +
Dans votre programme, vous pouvez alors utiliser :
 +
Sound1AsString := LazarusResources.Find('sound1').Value;
 +
 
 +
Voir [[Lazarus Resources/fr|Lazarus Resources]].
 +
 
 +
=== Que signifient les nombreuses extensions de fichier employées par Lazarus ? ===
 +
 
 +
La section [[Lazarus Tutorial/fr#Les fichiers de Lazarus]] explique quelques extensions par un exemple.
 +
En voici une courte liste :
 +
 
 +
{| class="wikitable sortable"
 +
|-
 +
! Extension !! Type de fichier  || Description
 +
|-
 +
| <code>.lpi</code> || Information de projet Lazarus || Contient des réglages spécifiques au projet comme les réglages du compilateur et les paquets nécessaires. Enregistré en XML.
 +
|-
 +
| <code>.lps</code> || Session de programme Lazarus || Données personnelles comme la position du curseur, les fichiers dans l'éditeur de sources, modes personnels de construction. Enregistré en XML.
 +
|-
 +
| <code>.lpr</code> || Programme Lazarus || Source Pascal du programme principal.
 +
|-
 +
| <code>.lfm</code> || Fiche Lazarus || Informations d'initialisation sur tous les objets disposés sur les fiches et les modules des données (enregistré dans un format textuel spécifique à Lazarus, similaire au fichier <code>*.dfm</code> de Delphi. Les actions sont décrites dans un fichier source Pascal, dans un fichier <code>*.pas</code> correspondant).
 +
|-
 +
| <code>.pas</code> <br /> <code>.pp</code> <br /> <code>.p</code> || Code Pascal || Code Pascal qui peut être associé à un fichier <code>*.lfm</code> (s'il décrit les actions d'une fiche/d'un module de données).
 +
|-
 +
| <code>.lrs</code> || Ressource Lazarus || Fichier de ressources généré par Lazarus. A ne pas confondre avec un fichier de ressources Windows. Ce fichier peut être créé avec l'outil lazres (dans le répertoire Lazarus/Tools) en utilisant la ligne de commande : <code>lazres myfile.lrs myfile.lfm</code>.
 +
|-
 +
| <code>.ppu</code> || Unité compilée || Code source compilé créé par le compilateur FPC pour chaque unité/programme.
 +
|-
 +
| <code>.o</code> || Fichier objet || Créé par le compilateur. Tout fichier <code>.ppu</code> a un fichier correspondant <code>.o</code>, nécessaire au lieur.
 +
|-
 +
| <code>.lpk</code> || Information de paquet Lazarus || Réglages spécifiques au paquet, comme les options de compilation et les paquets requis. Enregistré en XML.
 +
|-
 +
| <code>.lrt</code> || Table de ressources Lazarus || Table de chaînes de ressources Lazarus créée à l'enregistrement d'une fiche <code>lfm</code> quand l'i18n (internationalisation) est activée. Il contient les propriétés TTranslateString du fichier <code>lfm</code>. Ne pas les modifier manuellement : ils seront écrasés.
 +
|-
 +
| <code>.rst</code> || Table de chaînes de ressources || La table de chaînes de ressources créée par le compilateur pour chaque unité avec une section <code>resourcestring</code>. Ne pas éditer ce fichier qui sera écrasé au prochain enregistrement.
 +
|-
 +
| <code>.po</code> || Messages GNU gettext  || Quand l'[[i18n]] est activée, l'EDI crée/met à jour les fichiers <code>.po</code> avec les chaînes de ressources dans les fichiers <code>.rst</code> et <code>.lrt</code>.
 +
|}
 +
 
 +
=== Pourquoi les propriétés TForm.ClientWidth/ClientHeight sont-elles les mêmes que TForm.Width/Height ? ===
 +
Les TForm.Width/Height n'incluent pas le cadre, car il n'y a pas de manière fiable de récupérer la taille du cadre sur toutes les plates-formes. Sans moyen fiable, la LCL déplacerait les fiches sur l'écran ou les redimensionnerait sans fin.
 +
 
 +
Il se peut que ceci soit changé quand il y aura un moyen fiable pour obtenir la taille et la position d'une fenêtre avec son cadre sur toutes les plates-formes. Pour conserver la compatibilité avec les anciennes versions de LCL, un numéro de version et des méthodes supplémentaires seraient alors ajoutés.
  
=== Quand j'essaye de compiler un projet , J'ai une erreur  ===
+
== Erreurs ==
==== "Cannot find Unit interfaces". Comment peux je résoudre ceci ?====
 
Cette unité compilée peut être trouvé dans le répertoire {LazarusDir}\lcl\units\{TargetCPU}-{TargetOS}\{LCLWidgetSet}\interfaces.ppu.
 
  
S'assurer, qu'elle est seulement là. Si vous avez des versions multiples de interfaces.ppu, alors vous avez probablement une configuration fausse (par exemple vous avez ajouté un répertoire lcl à un chemin de recherche ). Enlever tous les interfaces.ppu, exceptés celui dans le répertoire ci-dessus .
 
  
Si vous choisissiez un ensemble de composants graphiques différent que celui que vous avez utilisé pour construire lazarus, vous devez construire la bibliothèque LCL pour cet ensemble de composants graphiques.  
+
=== Référence circulaire des unités a et b ===
 +
Un problème courant est rencontré par le nouveau programmeur quand il veut créer deux fiches qui font référence chacune aux propriétés de l'autre. L'erreur survient uniquement dans les clauses <code>uses</code> de la section <code>interface</code> ; pas de problème en revanche dans la section <code>implementation</code>.
  
Si elle est là , mais vous obtenez cette erreur , vous employez un compilateur/rtl différent pour compiler votre projet que celui employé pour la compilation de votre IDE Lazarus. Vous pouvez faire une des propositions suivantes
+
Exemples :
* Reconstruire la bibliothèque LCL (ou Lazarus complètement) avec le compilateur choisi dans les options d'Environnement. Vous pouvez faire ceci avec  Outils -> Construire Lazarus. Avant de faire ceci ,vérifier les paramètres courants dans Outils -> Configurer "Construire Lazarus".
 
* Changer le compilateur dans les options d'environnement vers celui que vous aviez utilisé pour compiler Lazarus. Regarder soigneusement également dans les options d'environnement pour voir si vous utilisez le chemin correct pour le répertoire de Lazarus Directory et le repertoire de FPC. Vérifier qu'il y a seulement une version du fichier de configuration du compilateur fpc.cfg - il devrait résider dans le répertoire /etc/ pour les systèmes Linux/Unix ou dans le même répertoire que le compilateur fpc pour les systèmes Windows. Essayez d'exécuter "fpc -vt bogus" pour vérifier quel fichier fpc.cfg est employé dans votre système . Des copies scélérates s'introduisent souvent si vous avez mis à jour votre compilateur à une nouvelle version ; ils peuvent être trouvés dans votre répertoire local ou dans le même répertoire  que celui dans lequel vous avez construit votre nouveau compilateur .  SUPPRIMER CES DERNIERS !!
 
* Vous pouvez également essayer de changer l'ensemble de composants graphiques actuellement choisi pour le projet. Par exemple , l'exemple de projet "objectinspector" qui accompagne Lazarus paramétré à gtk par défaut . Compiler ce projet va surement vous donner "Can't find unit interfaces" dans la plate-forme Windows. Changer le jeux de composants graphiques à default(Win32) dans Projet|Options du compilateur ... | Type composant graphique LCL (divers) devrait fixer ce problème.
 
  
=== Quand j'essaye de compiler des projets Delphi sous  lazarus, J'ai une erreur ===
+
Celui-ci provoque une erreur :
==== à la ligne  :{$R *.DFM} Comment puis je résoudre ce problème ? ====
+
<syntaxhighlight lang=pascal>unit a;
  
Lazarus (ou mieux Linux) ne sait rien des ressources, ainsi vous ne pouvez pas les employer avec la manière de faire de  Delphi/win32. Cependant Lazarus emploie une méthode assez compatible avec ceci. Vous pouvez encore employer vos plans de fiche Delphi (fichiers .dfm) si vous utilisez les étapes suivantes :
+
interface
  
*Vous avez besoin d'une version textuelle des fichiers .dfm. Delphi5 et au delà font ceci par défaut. Si vous avez des fichiers plus anciens : ALT-F12 pour voir le plan de fiche comme du texte et coller/copie. Quand vous avez un texte du fichier .dfm, copiez le juste vers un fichier .lfm.
+
uses b;
*Créer un fichier avec lazres (dans  lazarus/tools): lazres yourform.lrs yourform.lfm
+
 
*Ajouter la section suivante d'initialisation à
+
implementation
 +
 
 +
end.</syntaxhighlight>
 +
<syntaxhighlight lang=pascal>unit b;
 +
 
 +
interface
 +
 
 +
uses a;
 +
 
 +
implementation
 +
 
 +
end.</syntaxhighlight>
 +
 
 +
Contrairement à celui-ci :
 +
<syntaxhighlight lang=pascal>unit a;
 +
 
 +
interface
 +
 
 +
implementation
 +
 
 +
uses b;
 +
 
 +
end.
 +
</syntaxhighlight>
 +
<syntaxhighlight lang=pascal>unit b;
 +
 
 +
interface
 +
 
 +
implementation
 +
 
 +
uses a;
 +
 
 +
end.</syntaxhighlight>
 +
 
 +
Attention : il faut par conséquent s'assurer que les dépendances ne se trouvent que dans les sections <code>implementation</code>.
 +
 
 +
=== Lorsque je tape ''var mytext: text;'' pour déclarer un fichier texte, j'obtiens "Unit1.pas(32,15) Error: Error in type definition". Comment puis-je corriger cela ? ===
 +
La classe TControl possède une propriété [[doc:lcl/controls/tcontrol.text.html|Text]]. Dans une méthode de fiche, qui a une visibilité supérieure, il y a conflit avec le type [[doc:rtl/system/text.html|Text]] de  l'unité ''System''. Vous pouvez utiliser le type [[doc:rtl/system/textfile.html|TextFile]], qui est simplement un alias pour le type Text ou vous pouvez ajouter l'unité à la définition du type.
 +
var
 +
  MyTextFile: TextFile;
 +
  MyText: System.Text;
 +
Un problème de collision de nom similaire existe avec l'assignation et la fermeture d'un fichier texte. TForm possède des méthodes ''Assign'' et [[doc:lcl/forms/tcustomform.close.html|Close]]. Vous pouvez utiliser [[doc:rtl/objpas/assignfile.html|AssignFile]] et [[doc:rtl/objpas/closefile.html|CloseFile]] ou ajouter le nom de l'unité ''System''.
 +
 
 +
=== J'obtiens une erreur lorsque j'utilise Printer.BeginDoc. ===
 +
 
 +
L'unité ''Printers'' doit être ajoutée à la section uses.
 +
 
 +
Le paquet ''Printer4Lazarus'' doit être ajouté au pré-requis de votre projet dans l'IDE sous :
 +
Project|Project Inspector|Add|New Requirement|Package Name
 +
 
 +
Si le paquet ''Printer4Lazarus'' package n'est pas dans la liste lorsque vous ouvrez la boîte de liste, il doit être installé. Le paquet fait partie de l'installation de Lazarus et peut être trouvé dans :
 +
[lazarus installed directory]\components\printers
 +
 
 +
Si vous utilisez les dossiers d'installation, par défaut [lazarus installed directory] est:
 +
*Windows: c:\lazarus 
 +
*Linux: /usr/lib/lazarus
 +
 
 +
=== Quand j'essaie de compiler un projet, j'obtiens un message d'erreur "Cannot find Unit ..." ===
 +
Veuillez vous reporter à l'[[Unit not found - How to find units/fr|unité non trouvée - Comment trouver les unités]]
 +
 
 +
Pour de l'information sur l'erreur "Cannot find unit interfaces", voir la prochaine section.
 +
 
 +
=== "Cannot find Unit interfaces". Comment puis-je résoudre ce problème ?===
 +
 
 +
Cette erreur signifie que le compilateur ne peut pas trouver le fichier 'interfaces.ppu' ou que le fichier est trouvé mais qu'il est mauvais ou obsolète (la date du fichier .ppu est plus ancienne que la date du compilateur lui-même). Vérifier les options du compilateur peut aider à résoudre ce problème, en passant par : Options du compilateur... Utilisez alors le bouton ''Test'' en bas de la fenêtre. Ce test vérifiera aussi que les variables {TargetCPU} et {TargetOS} sont définies correctement.
 +
 
 +
L'unité en cause compilée peut être trouvée dans le répertoire {LazarusDir}\lcl\units\{TargetCPU}-{TargetOS}\{LCLWidgetSet}\interfaces.ppu. Il est normal d'avoir de multiples versions de ''interfaces.ppu'' pour permettre la compilation avec différents ensembles graphiques, mais dans des répertoires adaptés. Assurez-vous que l'unité est seulement dans le répertoire indiqué plus haut. Si vous avez des versions multiples de ''interfaces.ppu'', vous avez probablement une configuration erronée (par exemple, vous avez ajouté un répertoire lcl à un chemin de recherche). Supprimez tous les ''interfaces.ppu'', excepté celui dans le répertoire visé.
 +
 
 +
Si vous choisissez un ensemble de composants graphiques différent que celui que vous avez utilisé pour construire Lazarus, vous devez reconstruire la bibliothèque LCL pour cet ensemble de composants graphiques.
 +
 
 +
Si elle est là mais que vous obtenez cette erreur, vous employez un compilateur/rtl différent pour compiler votre projet de celui employé pour la compilation de votre EDI Lazarus.
 +
 
 +
Vous pouvez essayer une des solutions suivantes :
 +
* Reconstruisez la bibliothèque LCL (ou Lazarus complètement) avec le compilateur choisi dans les options d'environnement. Vous pouvez faire ceci avec  Outils -> Construire Lazarus. Vérifiez en premier lieu les paramètres courants dans Outils -> Configurer "Construire Lazarus".
 +
* Changez le compilateur dans les options d'environnement vers celui utilisé pour compiler Lazarus. Regardez soigneusement dans les options d'environnement pour voir si un chemin correct est choisi pour le répertoire de Lazarus et pour celui de FPC. Vérifiez qu'il y a qu'une version du fichier de configuration du compilateur ''fpc.cfg'' - il devrait résider dans le répertoire /etc/ pour les systèmes Linux/Unix ou dans le même répertoire que le compilateur fpc pour les systèmes Windows. Essayez d'exécuter "fpc -vt bogus" pour vérifier quel fichier ''fpc.cfg'' est employé par le système. Des copies fautives s'introduisent souvent après une mise à jour du compilateur ; elles peuvent être trouvées dans le répertoire local ou dans le même répertoire que celui dans lequel a été construit le nouveau compilateur. SUPPRIMEZ CES DERNIERS !
 +
* Vous pouvez également essayer de changer l'ensemble de composants graphiques actuellement choisi pour le projet. Par exemple, le projet "objectinspector" qui accompagne Lazarus est paramétré à ''gtk'' par défaut. Compiler ce projet va sûrement vous donner "Can't find unit interfaces" dans la plate-forme Windows. Changer le jeu de composants graphiques à default(Win32) dans [[IDE_Window:_Compiler_Options/fr | Projet | Options du compilateur]] ... | Type composant graphique LCL (divers) devrait corriger ce problème.
 +
 
 +
=== Quand je compile un projet qui utilise une unité LCL, j'obtiens une erreur du lieur. ===
 +
Voici un exemple d'une telle erreur :
 +
/path/to/lazarus/lcl/units/x86_64-linux/wsimglist.o: In function `REGISTERCUSTOMIMAGELIST':
 +
/path/to/lazarus/lcl//widgetset/wsimglist.pp:266: undefined reference to `WSRegisterCustomImageList'
 +
 
 +
*Assurez-vous que votre projet utilise le paquet LCL. Vous pouvez vérifier cela dans l'inspecteur de projet.
 +
*Assurez-vous que l'unité "Interfaces" est utilisée comme l'une des premières unités de votre programme.
 +
 
 +
{{Note|Ces fonctions sont implémentées comme des backend de la LCL. En ajoutant les interfaces d'unité, vous liez un backend LCL à votre programme.}}
 +
 
 +
=== ''à la ligne  :{$R *.DFM}'' - Comment puis je résoudre ce problème ? ===
 +
 
 +
Lazarus (ou mieux Linux) ne sait rien des ressources, ainsi vous ne pouvez pas les employer comme vous le feriez avec  Delphi/win32. Cependant Lazarus emploie une méthode assez compatible avec ce dernier. Vous pouvez par conséquent employer vos dispositions de fiche Delphi (fichiers ''.dfm'') si vous suivez ces étapes :
 +
 
 +
*Vous avez besoin d'une version textuelle des fichiers ''.dfm''. Delphi5 et au-delà en produisent par défaut. Si vous avez des fichiers plus anciens : {{keypress|Alt|F12}} pour voir la disposition de fiche comme du texte et coller/copier.
 +
*Quand vous avez un texte du fichier ''.dfm'', copiez-le simplement vers un fichier ''.lfm''.
 +
*Créez un fichier avec ''lazres'' (dans  lazarus/tools): lazres yourform.lrs yourform.lfm
 +
*Ajoutez la section suivante d'initialisation :
  
 
       initialization
 
       initialization
 
       {$I yourform.lrs}
 
       {$I yourform.lrs}
  
SVP, gardez à l'esprit que toutes les propriétés dans le fichier dfm ne sont toujours pas supportées par
+
Veuillez garder à l'esprit que toutes les propriétés dans le fichier ''dfm'' ne sont toujours pas supportées par
lazarus, ainsi vous pourriez obtenir un crash.
+
Lazarus. Vous pouvez par conséquent obtenir un crash.
 +
 
 +
Changement : depuis FPC 2.4.0, les ressources style Delphi sont supportées et vous n'avez plus besoin de changer quoi que ce soit. Même Lazarus SVN les utilise par défaut. Note : il est toujours recommandé d'utiliser le convertisseur Lazarus de projets Delphi, car il peut encore y avoir des propriétés non supportées.
 +
 
 +
Il est aussi possible pour un projet comprenant de nombreuses fiches, toutes en ''dfm'' binaire, de les convertir en fichier texte grâce à l'utilitaire convert.exe livré avec Delphi (cela est valable jusqu'à Delphi 7, à vérifier pour les versions ultérieures).
 +
 
 +
=== 'Identifier not found LazarusResources'. ===
 +
 
 +
En créant une fiche, Lazarus ajoute automatiquement quelques unités supplémentaires à la section ''uses'' de l'unité de votre fiche. Pendant la conversion d'une unité Delphi vers une unité Lazarus, cette procédure automatique ne se produit pas. Ainsi avez-vous à ajouter vous-même ''LResources'' à la section ''uses'' de l'unité de la fiche.
 +
 
 +
=== En accédant aux événements des objets (par exemple l'événement ''onclick'' d'un bouton), j'obtiens l'erreur suivante : ERROR unit not found: stdCtrls. Que puis-je faire ? ===
 +
 
 +
Assurez-vous, dans Projet -> Inspecteur de projet, que votre projet dépend du paquet 'LCL' et que vous avez installé les fichiers sources de FPC.
 +
 
 +
Lazarus est l'EDI et la bibliothèque de composants visuels est LCL.
 +
Tous les autres éléments (comme les bases de données, FCL et RTL) sont fournis par FPC.
 +
L'EDI a besoin des chemins vers tous les fichiers sources pour fonctionner correctement.
 +
 
 +
Le chemin des fichiers sources de FPC peut être paramétré via :
 +
Configuration -> Options d'environnement...  -> Fichiers -> Répertoire des sources de FPC
 +
 
 +
=== 'Fatal: Internal error XXXXYYZZW' ===
 +
Une erreur interne est une erreur du compilateur dont la survenue n'était pas attendue (mais il est préparé pour traquer facilement le problème en fournissant le code XXXXYYZZW). Toute erreur interne est un bogue, aussi est-il recommandé de la signaler dans le pisteur de bogues (avec un court exemple illustrant l'erreur interne).
 +
 
 +
== Débogueur ==
 +
''Voir also [[GDB Debugger Tips]].''
 +
 
 +
=== Comment puis-je régler/configurer pour le débogage ===
 +
[[Debugger_Setup |Configurer le débogueur]]
 +
 
 +
=== Comment puis-je inspecter les propriétés? ===
 +
Vous devez avoir FPC 2.4 ou plus récent.
  
==== 'Identifier not found LazarusResources'. ====
+
Si vous compilez votre application en utilisant -gw (info de debug dwarf), vous devriez être capable d'inspecter les propriétés.
  
En créant une fiche Lazarus ajoute automatiquement quelques unités supplémentaires à la section uses de l'unité de votre fiche. Pendant la conversion d'une unité delphi vers une unité Lazarus ceci ne se produit pas . Ainsi vous le besoin d'ajouter LResources à la section Uses de l'unité de la fiche.
+
{{Note|Cela est uniquement vrai pour les propriétés qui correspondent directement à une variable (le getter est une champ pas une fonction).}}
  
=== En accedant aux évènements des objets par exemple l'événement onclick d'un bouton j'obtiens l'erreur suivante . ERROR unit not found: stdCtrls ===
+
Si votre propriété retourne la valeur d'une fonction, il est très dangereux de l'évaluer/inspecter. Ceci requiert de l'appeler, ce qui par effet de bord peut modifier aussi quelques autres variables. Ceci signifie que l'état de votre application sera altéré dans le débogueur et dans toute exécution de code à venir, le débogage ou les inspections retourneraient des résultats incorrects.
  
S'assurer, dans Project -> Inspecteur de projet , que votre projet dépend du paquet  'LCL' et que vous avez installé les sources de FPC.
+
La capacité optionnelle d'inspecter explicitement les résultats des fonctions (avec les risques décrits) et donc l'appel de code depuis le débogueur n'est pas encore implémenté.
  
Lazarus est l'IDE et la bibliothèque de composants visuels LCL.
+
=== Pourquoi le débogueur ne montre pas certaines Variables/Structures ("no such symbol"/"incomplete type") ===
Toute autre substance , comme  IO, Base de données , FCL et  RTL sont fournis par FPC.
+
Pour des problèmes de débogage:
L'IDE a besoin des chemins vers toutes les sources .
+
* propriétés
 +
* Array of ... (tableau dynamique)
 +
* Variables dans des procédures imbriquées
 +
* "no such symbol in context"
 +
* "incomplete type"
  
Le chemin des sources de FPC peut être paramétré via:
+
Veuillez voir [[GDB Debugger Tips|Conseils sur le débogeur GDB]]
Configuration -> Options d'environnement...  -> Fichiers -> Répertoir des sources de FPC
 
  
===Comment inclure un petit fichier dans l'exécutable, sans avoir besoin d'un fichier externe? Comment inclure une ressource?===
+
=== Comment puis-je déboguer les composants FCL depuis les paquets avec Lazarus ? ===
 +
Les composants FCL et les classes sont construites sans informations de débogage par défaut et en conséquence, GDB ne peut pas accéder aux et propriétés de composants. Pour construire les composants du paquet, il faut les reconstruire avec la bascule information de débogage en ligne "-gl".
  
Par exemple:
+
Cet exemple suppose que vous avez une distribution Linux avec une installation dans /usr/local/ et que le paquet base de données fcl-db est celui qui va contenir les informations de débogage en ligne. Alors que le fcl-db est utilisé dans cet exemple, vous pouvez exécuter cette commande make sur tous les paquets inclus.
  /your/lazarus/path/tools/lazres sound.lrs sound1.wav sound2.wav ...
+
 
va créer sound.lrs à partir de sound1.wav et sound2.wav.
+
Avant de commencer, vous avez besoin de localiser votre chemin FPC en examinant votre fichier de configuration FPC. Le fichier (fpc.cfg) est localisé dans /etc/fpc.cfg. Affichez le contenu du fpc.cfg et trouvez le chemin d'installation de FPC. Recherchez une ligne démarrant avec -Fu dans le fichier :
 +
 
 +
  -Fu/usr/local/lib/fpc/$fpcversion/units/$fpctarget/*
 +
 
 +
 
 +
Les scripts Make installent des unités dans INSTALL_PATH/lib/fpc/$fpcversion/units/$fpctarget/, ainsi vous devez être sûr que /usr/local est le répertoire d'installation et devrait être affecté à INSTALL_PREFIX, sinon les scripts Make placeront les unités là où elles ne doivent pas être ou le script Make échouera.
 +
 
 +
'''Etape 1''': Ouvrir un terminal shell<br>
 +
'''Etape 2''': cd /user/local/share/src/fpc-2.3.1/fpc/fcl-db/<br>
 +
'''Etape 3''': sudo make clean all install INSTALL_PREFIX=/usr/local OPT=-gl<br>
 +
 
 +
{{Note|le paramètre INSTALL_PREFIX devrait être proprement configuré pour installer les  unités.}}
 +
Dans l'exemple ci-dessous /usr/local est le chemin par défaut sous Linux mais peut être différent sur d'autres systèmes d'exploitation.
 +
 
 +
<syntaxhighlight lang="bash">make clean all install INSTALL_PREFIX=/usr/local OPT=-gl</syntaxhighlight>
 +
 
 +
A la fin, après reconstruction de toute unité FCL, vous pouvez vouloir tout aussi bien reconstruire la LCL.
 +
 
 +
=== Problèmes avec GDB sur Mac OSX ===
 +
[[GDB_Debugger_Tips#Mac_OSX | Reportez-vous là pour les problèmes de débogage sous Mac]]
 +
 
 +
=== Comment utiliser un fichier log pour le débogage ? ===
 +
Lazarus fournit un framework basique dans l'unité [[LazLogger]]. Regardez cette page pour plus de détails.
 +
 
 +
=== Comment puis-je utiliser un fichier log pour le débogage de l'EDI ? ===
 +
Lazarus utilise lui-même [[LazLogger]].  
  
Incluez le alors *après* le fichier lrs de la fiche:
+
Ceci signifie que vous pouvez exécuter Lazarus avec <syntaxhighlight lang="bash">--debug-log=lazarusdebuglog.txt</syntaxhighlight>
  
...
+
Si ce n'est pas suffisant: dans l'EDI, l'ampleur de l'information rapportée peut être contrôlée par <code>--debug-enable</code>. Voir dans <code>--help</code> pour la liste des mots-clés, ou installer le paquet IdeLazLogger.
initialization
 
{$i unit1.lrs} // ceci est le fichier ressource principal (en premier)
 
{$i sound.lrs} // fichier ressource défini par l'utilisateur
 
 
end.
 
  
Dans votre programme vous pouvez alors utiliser:
+
Si vous voulez imprimer sur la console (le plus utile pour Windows), ajoutez {$APPTYPE console} dans lazarus.pp ; ensuite reconstruisez Lazarus.
Sound1AsString:=LazarusResources.Find('sound1').Value;
 
  
=== Comment puis-je voir la sortie de déboggage? (debug output) ===
+
Voir aussi [[Console Mode Pascal#Run in IDE with redirected output]]
  
 +
==== Détails ====
 
La LCL possède la procédure LCLProc pour écrire sur la sortie de débogage:  
 
La LCL possède la procédure LCLProc pour écrire sur la sortie de débogage:  
 
* '''DebugLn:''' fonctionne presque comme WriteLn, mais accepte uniquement des chaînes.
 
* '''DebugLn:''' fonctionne presque comme WriteLn, mais accepte uniquement des chaînes.
Line 172: Line 386:
 
Etant donnée que c'est implémenté dans lclproc, chaque application utilisant lclproc peut profiter de cette sortie.
 
Etant donnée que c'est implémenté dans lclproc, chaque application utilisant lclproc peut profiter de cette sortie.
  
;Deboggage de Lazarus : Le plus utile pour Windows: Si vous voulez faire une sortie sur console, ajoutez {$APPTYPE console} à lazarus.pp ; Ensuite recompilez Lazarus.
+
== Contribuer / Faire changer Lazarus ==
 +
=== J'ai créé un patch pour "docker" la fiche des messages de l'EDI en bas de l'éditeur de code source  ===
 +
De tels patchs ne seront pas appliqués car ils ne sont qu'une partie du docking voulu. Le but est de créer un gestionnaire complet de dock et de l'utiliser. Un gestionnaire complet de dock peut "docker" toutes les fenêtres de l'IDE et il laisse l'utilisateur en disposer comme il le veut. Par exemple, docker la fenêtre de message au dessus ou au dessous ou encore pas du tout. Par exemple :
  
=== Quelle est la signification des différentes extensions de fichier utilisées par Lazarus? ===
+
<pre>
 +
+-------------------++--+
 +
|menu              ||  |
 +
+-------------------+|  |
 +
+--++---------------+|  |
 +
|PI|| Source Editor ||CE|
 +
+--+|              ||  |
 +
+--+|              ||  |
 +
|  |+---------------++--+
 +
|OI|+-------------------+
 +
|  ||messages          |
 +
+--++-------------------+
 +
</pre>
  
La section [[Lazarus Tutorial/fr#Les fichiers de Lazarus]] explique quelques extensions par un exemple.
+
Le gestionnaire de dock peut enregistrer la disposition et la restaurer au prochain chargement. De préférence, le docking peut se faire dans les pages aussi. Il ne nécessite pas l'emploi du drag and drop. Tous les patchs mettant en oeuvre le docking sans un gestionnaire rend difficile l'implémentation d'un réel gestionnaire de dock et sera rejeté.
Voici une liste brève:
 
  
; <code>*.lpi</code> : fichier Lazarus Project Information; (stocké en XML; contient la configuration spécifique à un projet)
+
Un exemple pour un tel gestionnaire de dock est le paquet anchordockdsgn.
; <code>*.lpr</code> : fichier Lazarus Program; contient le source Pascal du programme principal
 
; <code>*.lfm</code> : fichier Lazarus Form; contient l'information de configuration pour tous les objets d'une fiche (stocké dans un format spécifique à Lazarus; les actions sont décrites par un code source Pascal dans un fichier <code>*.pas</code> correspondant)
 
; <code>*.pas</code> or <code>*.pp</code> : Unité avec du code Pascal (typiquement pour une fiche stockée dans le fichier <code>*.lfm</code> correspondant)
 
; <code>*.lrs</code> : Lazarus Resource file (c'est un fichier généré; ne pas confondre avec un fichier ressource de Windows).
 
: Ce fichier peut être créé avec l'outil lazres (dans le dossier Lazarus/Tools) en utilisant la ligne de commande: lazres myfile.lrs myfile.lfm
 
; <code>*.ppu</code> : Unité compilée
 
; <code>*.lpk</code> : fichier Lazarus package information. (stocké en XML; contient la configuration spécifique au paquet)
 
[[Lien titre]]
 
  
=== J'ai corrigé/amélioré Lazarus. Comment puis-ja ajouter mes changements au code source officiel de Lazarus ? ===
+
=== J'ai corrigé/amélioré Lazarus. Comment puis-je ajouter mes changements au code source officiel de Lazarus ? ===
 
Créez un patch et envoyez-le aux développeurs. Pour les détails, voir [[Creating A Patch/fr|Créer un Patch]].
 
Créez un patch et envoyez-le aux développeurs. Pour les détails, voir [[Creating A Patch/fr|Créer un Patch]].
  
=== Lorsque je fais ''var mytext: text;'' pour déclarer un fichier texte, j'obtiens "Unit1.pas(32,15) Error: Error in type definition". Comment puis-je corriger cela? ===
+
=== Comment puis-je installer plus d'une copie de Lazarus ? ===
La Classe TControl possède une propriété [[doc:lcl/controls/tcontrol.text.html|Text]]. Dans une méthode d'une fiche, ce qui a une visibilité supérieure, le type [[doc:rtl/system/text.html|Text]] de  l'unité system. Vous pouvez utiliser le type [[doc:rtl/system/textfile.html|TextFile]], qui est simplement un alias pour le type Text ou vous pouvez ajouter l'unité à la définition du type.
 
var
 
  MyTextFile: TextFile;
 
  MyText: System.Text;
 
Un problème de collision de nom similaire existe avec l'assignation et la fermeture d'un fichier texte. TForm possède des méthodes ''assign'' et [[doc:lcl/forms/tcustomform.close.html|Close]]. Vous pouvez utiliser [[doc:rtl/objpas/assignfile.html|AssignFile]] et [[doc:rtl/objpas/closefile.html|CloseFile]] ou ajouter le nom de l'unité ''System''.
 
  
=== J'obtiens une erreur lorsque j'utilise Printer.BeginDoc ===
+
Voir [[Multiple Lazarus]]
  
L'unité Printers doit être ajoutée à la section uses.
+
=== Comment puis-je devenir un développeur Lazarus et accéder à la gestion de SVN et du traqueur de bugs ? ===
 
+
En premier lieu, vous devez apprendre Lazarus, pour prouvez votre connaissance et votre compétence. Commencez par lire l'article Wiki [[Lazarus Documentation]],  lire le code source de Lazarus, jeter un oeil dans le [http://bugs.freepascal.org/set_project.php?project_id=1 traqueur de bug de Lazarus], corriger quelques bugs et si vous pensez être prêt, contactez les développeurs sur la [http://www.mail-archive.com/lazarus@miraclec.com liste de diffusion].
Le paquet Printer4Lazarus doit être ajouté au pré-requis de votre projet dans l'IDE sous:
 
Project|Project Inspector|Add|New Requirement|Package Name:
 
 
 
Si le paquet Printer4Lazarus package n'est pas dans la liste lorsque vous ouvrez la boîte de liste, il doit être installé. Le paquet fait partie de l'installation de Lazarus et peut être trouvé dans:
 
[lazarus installed directory]\components\printers
 
 
 
Si vous utilisez les dossiers d'installation par défaut [lazarus installed directory] est:
 
*Windows: c:\lazarus 
 
*Linux: /usr/lib/lazarus
 
  
 
== Où est/sont défini(e)(s)... ==
 
== Où est/sont défini(e)(s)... ==
  
 
=== Les Constantes de Virtual key ===
 
=== Les Constantes de Virtual key ===
Les constantes de Virtual key sont définies dans LCLType. Ajoutez LCLtype à votre <b>uses</b>.
+
Les constantes de Virtual key sont définies dans [[doc:lcl/lcltype|LCLType]]. Ajoutez LCLtype à votre <b>uses</b>.
  
 
== Utilisation de l'IDE ==
 
== Utilisation de l'IDE ==
Line 223: Line 428:
 
Vous pouvez invoquer la completion d'identifiant en pressant [ctrl][space].
 
Vous pouvez invoquer la completion d'identifiant en pressant [ctrl][space].
 
Dans le menu ''Configuration -> Options de l'éditeur -> Audit de Code -> Dispositifs Automatiques'' vous pouvez configurer à quelle vitesse cela apparaître automatiquement.
 
Dans le menu ''Configuration -> Options de l'éditeur -> Audit de Code -> Dispositifs Automatiques'' vous pouvez configurer à quelle vitesse cela apparaître automatiquement.
 +
 +
=== Puis-je changer les polices et couleurs de l'éditeur de code ? ===
 +
Oui, voir le menu  ''Tools -> Options'' et utiliser les sections Editeur/Affichage et couleurs. Sous Windows, vous pouvez trouver que la police par défaut Courier (au d'autre typographie) est soit trop dure soit trop douce, soit de sélectionner/désélectionner 'Désactiver l'anti-crénelage'. Les polices TrueType, telle que la libre "Bitstream Vera Sans Mono" disponible dans [http://ftp.gnome.org/pub/GNOME/sources/ttf-bitstream-vera/1.10/]. (Pour installer une nouvelle police, décompresser et copier les fichiers dans le répertoire adapté. Dans Windows XP, vous aurez besoin d'utiliser la section Polices du panneau de contrôle. Dans Windows 7, vous pouvez sélectionner tous les fichiers de police,  faites un clic droit et trouver une option 'Installer' dans le menu surgissant).
  
 
== Linux ==
 
== Linux ==
  
=== Comment puis-je débogguer sous Linux sans IDE? ===
+
=== Comment puis-je déboguer sous Linux sans IDE? ===
  
D'abord vous avez besoin d'un déboggueur. gdb est le déboggueur standard sous Linux et il y a plusieurs interfaces GUI disponibles. L'une des plus courantes est ddd, qui fait partie de la plupart des distributions courantes. Pour compiler Lazarus/lcl avec les informations de déboggage, vous devriez utiliser les commandes suivantes pour débuter une session de déboggage:
+
D'abord vous avez besoin d'un débogueur. gdb est le débogueur standard sous Linux et il y a plusieurs interfaces GUI disponibles. L'une des plus courantes est ddd, qui fait partie de la plupart des distributions courantes. Pour compiler Lazarus/lcl avec les informations de débogage, vous devriez utiliser les commandes suivantes pour débuter une session de débogage:
  
 
   $ make clean; make OPT=-dDEBUG
 
   $ make clean; make OPT=-dDEBUG
 
   $ ddd lazarus
 
   $ ddd lazarus
  
Soyez prévenu cependant que ddd n'est pas aussi confortable que par exemple le deboggueur de Lazarus.
+
Soyez prévenu cependant que ddd n'est pas aussi confortable que par exemple le débogueur de Lazarus.
 
Spécialement si c'est pour voir le contenu d'une variable vous devez prendre en compte le fait que ddd/gdb sont sensibles à la casse alors que Pascal y est insensible.
 
Spécialement si c'est pour voir le contenu d'une variable vous devez prendre en compte le fait que ddd/gdb sont sensibles à la casse alors que Pascal y est insensible.
Toutefois vous avez à taper tous les noms de variables en majuscule pour voir leur contenu. Pour plus d'information, jetez un oeil dans les manuels de FPC.
+
Par conséquent, vous devez à taper tous les noms de variables en majuscule pour voir leur contenu. Pour plus d'information, jetez un oeil dans les manuels de FPC.
  
 
=== Je peux désormais débogguer mais ddd ne trouve pas mes sources ou prétend qu'ils ne contiennent pas de code. Qu'est ce donc? ===
 
=== Je peux désormais débogguer mais ddd ne trouve pas mes sources ou prétend qu'ils ne contiennent pas de code. Qu'est ce donc? ===
Line 241: Line 449:
 
Ceci est un problème relatif au chemin avec soit gdb soit ddd. Vous pouvez éviter ceci:
 
Ceci est un problème relatif au chemin avec soit gdb soit ddd. Vous pouvez éviter ceci:
  
* Utilizes la commande "Changer de Dossier" du menu de ddd et choisissez le dossier où sont situées les sources. L'inconvénient de cette méthode est que maintenant vous ne pouvez plus utiliser la source du programme avec lequel vous avez commencé (par ex: lazarus). Donc il se peut qu'il soir nécessaire de changer de dossier plusieurs fois.
+
* Utilisez la commande "Changer de Dossier" du menu de ddd et choisissez le dossier où sont situées les sources. L'inconvénient de cette méthode est que maintenant vous ne pouvez plus utiliser la source du programme avec lequel vous avez commencé (par ex: lazarus). Donc il se peut qu'il soit nécessaire de changer de dossier plusieurs fois.
 
* Dans ddd, allez dans [Edit] [gdb-settings] et configurez le dossier de recherche.
 
* Dans ddd, allez dans [Edit] [gdb-settings] et configurez le dossier de recherche.
 
* Créeez un fichier $(HOME)/.gdbinit comme ci dessous:
 
* Créeez un fichier $(HOME)/.gdbinit comme ci dessous:
Line 248: Line 456:
 
       directory /your/path/to/lazarus/lcl/include
 
       directory /your/path/to/lazarus/lcl/include
  
=== J'obtiens une erreur durant la liaison qui fait état de: /usr/bin/ld can't find -l<some lib> ===
+
=== J'obtiens une erreur durant l'édition de lien qui fait état de: /usr/bin/ld can't find -l<some lib> ===
 +
 
 +
Par exemple:
 +
  /usr/bin/ld: cannot find -lgdk
 +
 
 +
Ceci signifie qu'une bibliothèque externe n'a pas été trouvée. Dans le cas de dessus sous Linux, cela signifie que la libgdk.so ou libgdk.a n'a pas été trouvée. Dans le cas de gdk, le paquet est appelé dans la distribution Fedora Core:  'gtk+-devel-1.2.10-33'.
 +
 
 +
; '''Distributions basées sur les paquets''' : Vous devez installer le paquet qui met à disposition les fichiers lib<somelib>.so ou lib<somelib>.a. Les bibliothèques dynamiques sous Linux ont pour extension .so, alors que les bibliotèques statiques ont pour extension .a. Sur certaines distributions Linux, vous avez installé le paquet (rpm, deb) <nom de paquet> qui met à disposition <some lib>, mais vous avez également besoin du paquet de développement (rpm, deb), normallement nommé <nom de paquet>-dev, qui contient le .a (bibliothèque statique) et/ou le .so (bibliothèque dynamique).
 +
 
 +
: Quelques distros ont des commandes pour trouver quel paquet contient un fichier:
 +
: '''Mandriva'''
 +
<syntaxhighlight lang="bash">
 +
urpmf lib<somelib>.so
 +
</syntaxhighlight>
 +
 
 +
:listera tous les paquets contenant le fichier nommé lib<somelib>.so, vous devrez installer ceux se terminant par -devel.
 +
 
 +
: '''Debian'''
 +
 
 +
:installer l'utilitaire  apt-file (apt-get install apt-file) ensuite
 +
<syntaxhighlight lang="bash">
 +
apt-file search lib<somelib>.so
 +
</syntaxhighlight>
 +
 
 +
:listera tous les paquets contenant le fichier nommé lib<somelib>.so, vous devrez installer ceux se terminant par -dev.
  
; '''Distributions basées sur les Packaged''' : Vous devez installer le package qui met à disposition les fichiers lib<somelib>.so ou lib<somelib>.a. Les bibliothèques dynamiques sous Linux ont pour extension, alors que les bibliotèques statiques ont pour extension .a. Sur certaines distributions Linux, vous avez installé le  package (rpm, deb) <packagename> qui met à disposition <some lib>, mais vous avez également besoin du package de développement (rpm, deb), normallement nommé <packagename>-dev, qui contient le .a (static lib) et/ou le .so (dynamic lib).
+
: '''SuSE'''
 +
 
 +
:SuSE installe les bibliothèques gtk devel dans /opt/gnome/lib (or /opt/gnome/lib64 pour 64 bits), qui n'est pas le chemin standard aux bibliothèques. Ajoutez-le simplement dans votre /etc/fpc.cfg. (-Fl/opt/gnome/lib).
  
 
; '''Distributions basées sur les sources et la Compilation Manuelle(LFS)''' : Assurez-vous qu'il y ait un lib<somelib>.a dans le path, et qu'il contient la bonne version. Pour permettre au linker de trouver la bibliothèque dynamique, créez un lien symbolique appelé lib<some lib>.so vers lib<some lib><version>-x,y.so si nécessaire (et/ou pour les bibliothèques statiques; lib<some lib>.a vers lib<some lib><version>-x,y.a).
 
; '''Distributions basées sur les sources et la Compilation Manuelle(LFS)''' : Assurez-vous qu'il y ait un lib<somelib>.a dans le path, et qu'il contient la bonne version. Pour permettre au linker de trouver la bibliothèque dynamique, créez un lien symbolique appelé lib<some lib>.so vers lib<some lib><version>-x,y.so si nécessaire (et/ou pour les bibliothèques statiques; lib<some lib>.a vers lib<some lib><version>-x,y.a).
  
; '''FreeBSD''' : Comme pour les ditros basées sur les sources, assurez-vous aussi que vous avez -Fl/usr/local/lib dans votre chemin de bibliothèques de fpc.cfg et/ou Lazarus. Gardez à l'esprit que GTK1.2 a "gtk12" pour nom de package sous FreeBSD. (idem pour glib) NOTE: Cela a changé depuis. Les nouveaux portages ont pour nom gtk-12 et glib-12. Vous pouvez vous faire avoir sur ce problème, car FPC requiert les "-less", vous aurez besoin de les symlinker comme ceci:
+
: '''FreeBSD''' :
 +
:Comme pour les distros basées sur les sources, assurez-vous aussi que vous avez -Fl/usr/local/lib dans votre chemin de bibliothèques de fpc.cfg et/ou Lazarus. Gardez à l'esprit que GTK1.2 a "gtk12" pour nom de package sous FreeBSD. (idem pour glib) NOTE: Cela a changé depuis. Les nouveaux portages ont pour nom gtk-12 et glib-12. Vous pouvez vous faire avoir sur ce problème, car FPC requiert les "-less", vous aurez besoin de les symlinker comme ceci:
  
[]# cd /usr/local/lib && ln -s libglib-12.so libglib12.so
+
<syntaxhighlight lang="bash">
[]# cd /usr/X11R6/lib && ln -s libgtk-12.so libgtk12.so
+
# as root
[]# cd /usr/X11R6/lib && ln -s libgdk-12.so libgdk12.so
+
cd /usr/local/lib && ln -s libglib-12.so libglib12.so
 +
cd /usr/X11R6/lib && ln -s libgtk-12.so libgtk12.so
 +
cd /usr/X11R6/lib && ln -s libgdk-12.so libgdk12.so
 +
</syntaxhighlight>
  
; '''NetBSD''' : Comme les distros basées sur les sources, assurez-vous aussi que vous avez -Fl/usr/pkg/lib dans votre chemin de bibliothèques de fpc.cfg et/ou Lazarus.
+
: '''NetBSD''' :
 +
: Comme les distros basées sur les sources, assurez-vous aussi que vous avez -Fl/usr/pkg/lib dans votre chemin de bibliothèques de fpc.cfg et/ou Lazarus.
 +
 
 +
: '''Fedora''' :
 +
: Dans le panneau "Ajouter/Supprimer un logiciel", recherchez: "gtk2-devel", "glibc-devel" ([http://www.mail-archive.com/lazarus@lists.lazarus.freepascal.org/msg03637.html voir ici]), "libx11-devel"
  
 
=== Comment puis-je convertir un projet Kylix 2 en projet Lazarus? ===
 
=== Comment puis-je convertir un projet Kylix 2 en projet Lazarus? ===
Line 277: Line 519:
 
* Retirez la directive {$R *.res}
 
* Retirez la directive {$R *.res}
 
* Retirez la directive {$R *.xfm}
 
* Retirez la directive {$R *.xfm}
* Ajoutez les directives {$mode objfpc}{$H+} ou {$mode delphi}{$H+} au fichiers .pas et .lpr
+
* Ajoutez les directives {$mode objfpc}{$H+} ou {$mode delphi}{$H+} aux fichiers .pas et .lpr
 
* Ajoutez une section initialization à la fin de chaque source de fiche et ajoutez une directive include pour le fichier .lrs (lazarus resource file):
 
* Ajoutez une section initialization à la fin de chaque source de fiche et ajoutez une directive include pour le fichier .lrs (lazarus resource file):
 
   initialization
 
   initialization
Line 284: Line 526:
 
:Par exemple: ./lazres unit1.lrs unit1.lfm
 
:Par exemple: ./lazres unit1.lrs unit1.lfm
  
* Fixez les différences. La LCL ne suporte pas actuellement chaque propriété de la VCL et le CLX n'est pas complètement compatible avec la VCL.
+
* Fixez les différences. La LCL ne supporte pas actuellement toutes les propriétés de la VCL et le CLX n'est pas complètement compatible avec la VCL.
 +
 
 +
* Pour le rendre plus indépendant de la plate-forme, éliminez les références à l'unité libc (qui est déprécié) en les substituant avec des unités natives FPC comme baseunix/unix tant que possible. Cela sera nécessaire pour supporter d'autres cibles que Linux/x86 (comprenant OS X, FreeBSD et Linux/x86_64)
  
 
=== Quand je compile Lazarus le compilateur ne peut pas trouver une unité. ex: gtkint.pp(17,16) Fatal: Can't find unit GLIB ===
 
=== Quand je compile Lazarus le compilateur ne peut pas trouver une unité. ex: gtkint.pp(17,16) Fatal: Can't find unit GLIB ===
Line 294: Line 538:
 
3. Vérifiez que le compilateur utilise le bon fichier de cconfiguration. L'installation normale crée /etc/fpc.cfg. Mais fpc cherche également ~/.ppc386.cfg, ~/.fpc.cfg, /etc/ppc386.cfg et il utilise uniquement le premier qu'il rencontre.
 
3. Vérifiez que le compilateur utilise le bon fichier de cconfiguration. L'installation normale crée /etc/fpc.cfg. Mais fpc cherche également ~/.ppc386.cfg, ~/.fpc.cfg, /etc/ppc386.cfg et il utilise uniquement le premier qu'il rencontre.
  
:'''Conseil:''' Vous pouvez coir quel fichier de configuration est utilisé avec 'ppc386 -vt bogus'
+
:'''Conseil:''' Vous pouvez voir quel fichier de configuration est utilisé avec 'ppc386 -vt bogus'
 
:Retirez tout ppc386.cfg du fait qu'il est réellement obsolète.
 
:Retirez tout ppc386.cfg du fait qu'il est réellement obsolète.
  
Line 321: Line 565:
 
''#'' sudo ./samplecfg /usr/lib/fpc/''\$version'' /etc
 
''#'' sudo ./samplecfg /usr/lib/fpc/''\$version'' /etc
  
Note! Ne mettez pas - / - après etc car si cous le faites le système va créer un fichier - /etc/fpc.cfg/fpc.cfg. En fait, nous voulons que samplecfg fasse un fichier - /etc/fpc.cfg - et non un dossier /etc/fpc.cfg.
+
{{Note| Ne mettez pas - / - après etc car si cous le faites le système va créer un fichier - /etc/fpc.cfg/fpc.cfg. En fait, nous voulons que samplecfg fasse un fichier - /etc/fpc.cfg - et non un dossier /etc/fpc.cfg.}}
  
 
=== J'ai installé la version binaire, mais quand je compile un projet simple, Lazarus me donne: Fatal: Can't find unit CONTROLS ===
 
=== J'ai installé la version binaire, mais quand je compile un projet simple, Lazarus me donne: Fatal: Can't find unit CONTROLS ===
  
Vous utilisez probablement un package fpc plus récent que celui utilisé pour construire les bianires de Lazarus.
+
Vous utilisez probablement un paquet fpc plus récent que celui utilisé pour construire les binaires de Lazarus. La meilleure solution est de télécharger les sources et de compiler Lazarus manuellement. Vous pouvez télécharger le snapshot du source ou obtenir le source via svn:
La meilleure solution est de télécharger les sources et de compiler Lazarus manuellement.
 
Vous pouvez télécharger le snapshot du source ouobtenir le source via svn:
 
  
  $ bash
+
<syntaxhighlight lang="bash">$ bash
  $ svn checkout http://svn.freepascal.org/svn/lazarus/trunk lazarus
+
$ svn checkout http://svn.freepascal.org/svn/lazarus/trunk lazarus
  $ cd lazarus
+
$ cd lazarus
  $ make clean all
+
$ make clean all</syntaxhighlight>
  
 
Assurez-vous que Lazarus a le dossier du nouveau source:
 
Assurez-vous que Lazarus a le dossier du nouveau source:
 
Environment->General Options->Files->Lazarus Directory Top
 
Environment->General Options->Files->Lazarus Directory Top
  
===Lazarus compiles, but linking fails with: libgdk-pixbuf not found===
+
=== Lazarus compiles, but linking fails with: libgdk-pixbuf not found ===
Either install the gdk-pixbuf library for gtk1.x or disable the use:
+
Installer la bibliothèque gdk-pixbuf pour gtk1.x:
  
Where to find the gdk-pixbuf library:
+
Où trouver la bibliothèque gdk-pixbuf:
  
 
RPMs:
 
RPMs:
 
http://rpmfind.net/linux/rpm2html/search.php?query=gdk-pixbuf&submit=Search+...&system=&arch=
 
http://rpmfind.net/linux/rpm2html/search.php?query=gdk-pixbuf&submit=Search+...&system=&arch=
  
Debian packages:
+
Paquet Debian:
 
libgdk-pixbuf-dev
 
libgdk-pixbuf-dev
  
Line 351: Line 593:
 
ftp://ftp.gnome.org/pub/gnome/unstable/sources/gdk-pixbuf/
 
ftp://ftp.gnome.org/pub/gnome/unstable/sources/gdk-pixbuf/
  
 +
'''Ubuntu 8.10:'''
 +
 +
Si vous compilez Lazarus avec GTK 2.0 vous obtiendrez une erreur "libgdk-pixbuf2.0" non trouvée. Installez juste libgtk2.0-dev en utilisant apt de cette façon:
 +
 +
<syntaxhighlight lang="bash">apt-get install libgtk2.0-dev</syntaxhighlight>
  
How to disable the use in lazarus: In Tools->Configure "Build Lazarus" add the option
+
Comment désactiver l'utilisation dans Lazarus: Dans Outils-> Configurer "Création de Lazarus", ajouter l'option '-dNoGdkPixBufLib'.
'-dNoGdkPixBufLib'
+
 
or at command line:
+
ou par la ligne de commande:
 
"make clean all OPT=-dNoGdkPixBufLib".
 
"make clean all OPT=-dNoGdkPixBufLib".
  
===I have SuSE and I get /usr/bin/ld: cannot find -lgtk Error: Error while linking===
+
===J'ai SuSE et j'obtiens /usr/bin/ld: ne peut trouver -lgtk Erreur: Erreur pendant l'édition de lien ===
SuSE installs the gtk devel libs under /opt/gnome/lib (or /opt/gnome/lib64 for 64 bits), which is not in
+
SuSE installe les bibliothèques gtk devel sous /opt/gnome/lib (ou gnome/lib64 pour le 64 bits),qui n'est pas un chemin de bibliothèque standard. Ajoutez-le simplement dans votre /etc/fpc.cfg.
the standard lib path. Simply add it to your /etc/fpc.cfg.
 
 
(-Fl/opt/gnome/lib).
 
(-Fl/opt/gnome/lib).
  
===Lazarus crashes with runtime error 211 after I installed a component===
+
=== J'ai Kubuntu et j'obtiens /usr/bin/ld: ne peut trouver -lgtk-x11-2.0===
After I installed a component, Lazarus crashes with the following message:
+
 
 +
Vous pouvez soit utiliser le backend QT ou GTK2. Par défaut, c'est GTK2. Pour GTK2, installer le paquet kubuntu ''libgtk2.0-dev''.
 +
 
 +
=== Lazarus s'écrase avec une erreur d'exécution 211 après avoir installé un composant ===
 +
 
 +
Après que j'ai installé un composant, Lazarus plante avec le message suivant:
 
  Threading has been used before cthreads was initialized.
 
  Threading has been used before cthreads was initialized.
 
  Make cthreads one of the first units in your uses clause.
 
  Make cthreads one of the first units in your uses clause.
 
  Runtime error 211 at $0066E188
 
  Runtime error 211 at $0066E188
How can I fix this?
+
Comment puis-je corriger ceci?
  
Your freshly installed component is using threads. Fpc on *nix doesn't automatically include threading support, but it must be intialized. This initialization is done in the cthreads unit. Every application using the component needs to add this unit to the uses clause of the main program. Lazarus itself is no exception. This can be done in two ways:
+
Votre composant fraichement installé utilise des threads. FPC sous *nix n'intègre pas automatiquement le support du threading, mais il doit être initialisé. L'initialisation est réalisée dans l'unité cthreads. Toute application utilisant le composant a besoin d'ajouter cette unité dans la clause 'uses' du programme principal. Lazarus lui-même ne fait pas exception. Ceci peut être fait de deux façons:
  
1) Change the source of ide/lazarus.pp: add the cthreads as first unit to the uses clause, so that is looks like this:
+
1) Ouvrez le paquet. Dans l'éditeur de paquet, cliquez sur ''Options''. Dans la page ''Utilisation'' ajoutez dans les options personnalisées '''-dUseCThreads'''. Puis reconstruisez l'EDI. De cette manière, l'unité 'cthreads' sera automatiquement utilisée par l'IDE sous Unix et les cthreads sont initialisés.
uses
+
 
  //cmem,
+
2) Afin d'éviter de modifier le paquet, une option du compilateur FPC peut être utilisée directement. Ouvrez le menu Outils->Configurer "Création de Lazarus", un dialogue sera affiché ; dans le champ "Options:" tapez <code>-Facthreads</code> puis pressez sur le bouton "Ok". La prochaine étape est d'installer le paquet. Lazarus sera reconstruit avec l'option -Facthreads, ce qui signifie qu'il traitera le programme principal comme si l'unité cthreads était la première dans la clause uses.
  cthreads,
 
  {$IFDEF IDE_MEM_CHECK}
 
...
 
and rebuild lazarus.
 
  
2) In order to avoid modifying lazarus.pp file, a fpc compiler option could be used. Once package that uses threads has been compiled, open menu Tools->Configure "build Lazarus". Configure "build Lazarus" dialog will be shown, in field "Options:" type -Facthreads and then press "OK" button. The next step is to install the package. Lazarus will be built with option -Facthreads which means that it will treat main program as if unit cthreads where first in uses clause.  
+
''Conseil:'' Peut-être votre ancien (sans plantage) exécutable Lazarus est enregistré comme lazarus.old dans le même répertoire que le Lazarus qui plante..
  
''Hint:'' Maybe your old (non-crashing) lazarus executable is stored as lazarus.old in the same directory as the crashing lazarus executable.
+
Voir aussi [[Multithreaded Application Tutorial#Units needed for a multithreaded application]]
  
===When I run a program with threads I get runtime error 232===
+
=== Quand j'exécute un programme avec des threads j'obtiens l'erreur d'exécution 232 ===
The complete error message is:
+
Le message d'erreur complet est:
 
  This binary has no thread support compiled in.
 
  This binary has no thread support compiled in.
 
  Recompile the application with a thread-driver in the program uses
 
  Recompile the application with a thread-driver in the program uses
 
  clause before other units using thread.
 
  clause before other units using thread.
 
  Runtime error 232
 
  Runtime error 232
'''Solution''': Add cthreads as first unit to the uses clause of your main program, usually the .lpr-file.
+
'''Solution''': Ajoutez cthreads comme première unité de la clause uses du programme principal, habituellement le fichier .lpr.
 
 
===I have Ubuntu Breezy and my fonts in Lazarus IDE look too big===
 
If Lazarus is compiled with Gtk1.2, the settings in Gnome Preferences/Font don't have any effect as
 
they are related to Gtk2.
 
You could try this solution:
 
Create a file named .gtkrc.mine in your home directory (if it's not already there) and add
 
these lines to it:
 
  
 +
=== J'ai Ubuntu Breezy et mes polices dans l'EDI Lazarus paraissent trop grosse ===
 +
Si Lazarus est compilé avec Gtk1.2, les réglages dans les Préférences Gnome/Police n'ont pas d'effet comme dans Gtk2.
 +
Vous pouvez essayer cette solution:
 +
Créez un fichier nommé  .gtkrc.mine dans votre répertoire personnel si ce n'est déjà le cas et ajoutez-lui ces lignes :
 
<pre>
 
<pre>
 
style "default-text" {
 
style "default-text" {
Line 407: Line 651:
 
</pre>
 
</pre>
  
===How can my gtk programs use custom rc files?===
+
Si ce n'est pas suffisant, essayez de créer un lien symbolique '.gtkrc' vers '.gtkrc.mine'. Cela fonctionne de cette façon sous Xubuntu 7.10, Mandriva 2009.0 KDE3.
  
 +
=== Comment mon programme gtk peut-il utiliser les fichiers rc personnalisés ? ===
 
Option a)
 
Option a)
Name the rc file ''yourprogram.gtkrc'' and put it in the same directory where the executable is.
+
Nommez votre fichier rc ''yourprogram.gtkrc'' et mettez-le dans le même répertoire que l'exécutable.
  
 
Option b)
 
Option b)
Use unit ''GtkInt'' and call ''GTKWidgetSet.SetRCFilename('your_preferred_rc_file');''
+
Utilisez l'unité ''GtkInt'' et appelez ''GTKWidgetSet.SetRCFilename('your_preferred_rc_file');''
Best done before ''Application.Initialize'' in the .lpr file with ''{$IFDEF LCLGtk}''.
+
Le meilleur est quand l'appel précède ''Application.Initialize'' dans votre fichier .lpr avec ''{$IFDEF LCLGtk}''.
  
===I have Ubuntu and I cannot compile for Gtk2 due to missing libraries===
+
Option c)
Ubuntu has a problem with not creating all the symbolic links that you'll need even when the libraries are installed. Make sure that all missing libraries when trying to link for Gtk2 have their appropriate links. For instance, you might need to do:
+
Utilisez l'unité ''gtk2'' et appelez ''gtk_rc_parse('your_rc_file'));'' et ''gtk_rc_reparse_all;''.
 +
 
 +
=== J'ai Ubuntu et je ne peux pas compiler pour Gtk2 à cause du manque de bibliothèques ===
 +
Ubuntu a un problème en ne créant pas tous les liens symboliques dont vous aurez besoin même si les bibliothèques sont installées. Assurez-vous que toutes les bibliothèques manquantes ont leurs liens appropriés quand vous essayer de lier pour Gtk2. Par exemple, vous aurez peut-être besoin de faire:
  
 
<pre>
 
<pre>
Line 423: Line 671:
 
sudo ln -s libgdk-x11-2.0.so.0 libgtk-x11-2.0.so
 
sudo ln -s libgdk-x11-2.0.so.0 libgtk-x11-2.0.so
 
</pre>
 
</pre>
 +
Assurez-vous que les liens symboliques [n'importe  quoi].so sont créés et pointent vers les bibliothèques en cours.
  
Make sure that the [whatever].so symbolic links are created and point to the actual libraries.
+
=== Comment puis-je compiler un programme pour Gtk2 ? ===
 +
Pour le moment, l'EDI compilé pour Gtk2 est un peu instable, mais vous pouvez compiler du logiciel pour Gtk2 en utilisant l'EDI Gtk1.
  
===How can I compile a program for Gtk2?===
+
Pour démarrer la recompilation de la LCL pour Gtk2. Allez au menu "Outils" -> "Configurer Création de Lazarus" et choisissez 'Clean all'.
  
At the moment, the Gtk2 compiled IDE is a little unstable, but you can compile software for Gtk2 using the Gtk1 IDE.
+
Maintenant cliquez sur Ok et allez vers le menu "Outils" -> "Créer Lazarus avec le profil...".
  
To start with recompile LCL for Gtk2. Go to the menu "Tools"->"Configure Build Lazarus" and set LCL to clean+build and everything else to none.
+
Maintenant vous pouvez compiler votre logiciel avec Gtk2 en allant sur les options du compilateur et en changeant le widgetset vers Gtk2.
  
Now click Ok and go to the menu "Tools"->"Build Lazarus"
+
=== Lazarus s'exécute différemment avec Linux ou Windows. Que dois-je savoir ? ===
  
Now you can compile your software with Gtk2 going on the Compiler options and changing the widgetset to Gtk2.
+
Si vous utilisez Readln(); et Writeln(); pour vos entrée et sortie, la fenêtre de console (parfois appelée fenêtre de terminal) ne va pas surgir comme il le fait avec Windows. Vous aurez besoin d'accéder à cette fenêtre dans Lazarus avec Voir -> Debug Windows -> Sortie Terminal. Contrairement à Windows, vous ne pouvez pas utilisez le retour arrière pour corriger les erreurs que vous avez tapées. La touche Entrée sur le pavé numérique ne marchera pas non plus. Tapez prudemment !
  
===I get this message: "[WARNING] ** Multibyte character encodings (like UTF8) are not supported at the moment."===
+
Linux étant sensible à la casse, vous devrez faire attention à la casse dans les noms de fichier.
 
 
Since revision 10535 (0.9.21) this message doesn't exist anymore.
 
Previously it was used to warn that a UTF-8 encoding was used. The internal keyhandling routines for the gtk1 widgetset couldn't handle such encoding for keypresses, with the result that keypresses with for instance accented chars were not or wrong detected.
 
 
 
(original text for older versions of lazarus)<br>
 
<strike>
 
This warning message indicates that your locale enconding is set to utf-8. If you are using Gtk 1 this can be a serious problem and prevent the correct working of Lazarus or software created with Lazarus.
 
 
 
To work around this, just change your locale to a non utf-8 before executing the program on the command line, like this:
 
 
 
<pre>
 
export LC_CTYPE="pt_BR"
 
export LANG="pt_BR"
 
export LANGUAGE="pt_BR"
 
./lazarus
 
</pre>
 
 
 
Substitute pt_BR with the locale for your country. You can create a script to automate this.
 
</strike>
 
  
 
== Windows ==
 
== Windows ==
  
=== When I cycle the compiler, I get:The name specified is not recognized as an internal or external command, operable program or batch file.>& was unexpected at this time. ===
+
=== Quand je compile le compilateur, j'obtiens: The name specified is not recognized as an internal or external command, operable program or batch file.>& was unexpected at this time. ===
  
In the compiler dir exists an OS2 scriptfile named make.cmd. NT sees this also
+
Dans le répertorie du compilateur, il existe un scripts OS2 nommé make.cmd. NT le voit aussi comme un script, il faut donc le supprimer sur NT, nous n'en avons pas besoin.
as a script file, so remove it since on NT we don't need it.
 
  
=== When I cycle the compiler, I get: make[3]: ./ppc1.exe: Command not found ===
+
=== Quand je compile le compilateur, j'obtiens: make[3]: ./ppc1.exe: Command not found ===
  
I don't know why but somehow make has lost its path. Try to cycle with a
+
Je ne sais pas pourquoi, mais make a en quelque sorte perdu son chemin. Essayez de compiler avec une basedir définie comme: make cycle BASEDIR = your_fpc_source_dir_herecompiler
basedir set like: make cycle BASEDIR=your_fpc_source_dir_herecompiler
 
  
=== When I try to make Lazarus I get:===
+
=== Quand j'essaie de construire (make) Lazarus, j'obtiens:===
 
====make.exe: * * * interfaces: No such file or directory (ENOENT). Stop.make.exe: * * * [interfaces_all] Error 2 ====
 
====make.exe: * * * interfaces: No such file or directory (ENOENT). Stop.make.exe: * * * [interfaces_all] Error 2 ====
You need to upgrade your make.
+
 
 +
Vous devez mettre à niveau votre make.
  
 
====makefile:27: *** You need the GNU utils package to use this Makefile.  Stop.====
 
====makefile:27: *** You need the GNU utils package to use this Makefile.  Stop.====
Make sure you didn't install FPC in a path with spaces in the name. The
 
Makefile doesn't support it.
 
  
 +
Assurez-vous que vous n'avez pas installé FPC dans un chemin contenant des espaces. Le MakeFile ne supporte pas cela.
  
 +
===How can I give my program an XP look like lazarus has?===
 +
Projet -> Options du projet -> Coche 'Utiliser le fichier manifeste pour autoriser les thèmes'.
 +
 +
Si vous avez un myprogram.exe alors créez un fichier appelé myprogram.exe.manifest and copiez/collez ceci dans la fichier:
  
===How can I give my program an XP look like lazarus has?===
 
If you have a myprogram.exe then create a file which called myprogram.exe.manifest and copy-paste
 
this to the file:
 
 
  <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 
  <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 
  <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
 
  <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
 
  <assemblyIdentity processorArchitecture="*" version="1.0.0.0" type="win32" name="myprogram"/>
 
  <assemblyIdentity processorArchitecture="*" version="1.0.0.0" type="win32" name="myprogram"/>
  <description>programom</description>
+
  <description>programm</description>
 
  <dependency>
 
  <dependency>
 
   <dependentAssembly>
 
   <dependentAssembly>
Line 498: Line 728:
 
   </dependency>
 
   </dependency>
 
  </assembly>
 
  </assembly>
Voila! XP looks.
+
Voila! XP apparaît.
  
===When I run Windows program created in Lazarus it starts with a DOS window===
+
=== Quand j'exécute un programme Windows créé dans Lazarus il démarre dans une fenêtre DOS ===
Specify the -WG argument (Windows GUI) on the command line of the compiler or in the Lazarus IDE check the Windows GUI check box on the compiler options dialog box (Project menu -> Compiler Options -> Linking -> target OS Specific options.
+
Spécifiez l'argument -WG (IHM Windows) dans la ligne de commande du compilateur ou dans l'EDI Lazarus, cochez la case Application Win32 gui dans le dialogue des options du compilateur (Menu Projet -> Options du compilateur -> Config and Target  -> target-specific options.
 +
 
 +
== Mac OS X ==
 +
=== Pourquoi la compilation d'un projet échoue avec 'unknown section attribute: no_dead_strip'? ===
 +
 
 +
Le "décapage" du code mort n'est pas supporté par l'assembleur et le lieur avant Xcode 1.5 (disponible pour Mac OS X 10.3.9). Désactiver les options du compilateur
 +
 
 +
*Compilation and linking > Style de l'unité > Lien intelligent (-CX)
 +
*et Edition de lien > Lier intelligemment (-XX)
 +
 
 +
=== Débogage ===
 +
[[GDB_Debugger_Tips#Mac_OSX | Voir ici pour les questions sur le débogage sous Mac]]
  
 
== Licence ==
 
== Licence ==
  
=== Puis-je développer des applications propriétaires avec Lazarus ? ===
+
=== Puis-je développer des applications commerciales avec Lazarus ? ===
  
Oui, les composants LCL sont distribués sous la licence LGPL avec une exception, ce qui vous autorise à lier statiquement ces composants sans distribuer le code source de votre application. Les modifications et améliorations des composants LCL doivent être distribués avec le code source. L'EDI Lazarus est lui sous licence GPL.
+
Oui, les composants LCL sont distribués sous la licence [[FPC modified LGPL|LGPL avec une exception]], ce qui vous autorise à lier statiquement ces composants sans distribuer le code source de votre application. Les modifications et améliorations des composants LCL doivent être distribués avec le code source. L'EDI Lazarus est lui sous licence GPL. La LCL est restreinte au code dans le répertoire nommé "lcl", un aute code ne pourrait être couvert par cette instruction.
  
 
=== Pourquoi certains composants ne peuvent être utilisés dans une application propriétaire ? ===
 
=== Pourquoi certains composants ne peuvent être utilisés dans une application propriétaire ? ===
  
Lazarus est fourni avec des composants additionnels, qui ont été développés par d'autres parties. Ceux-ci peuvent donc être sous une licence différente. Si vous voulez les utiliser, vous devez vérifier la licence dans le code source de ces composants.
+
Lazarus est fourni avec des composants additionnels, qui ont été développés par de tierces parties. Ceux-ci peuvent donc être sous une licence différente. Si vous voulez les utiliser, vous devez vérifier la licence dans le code source de ces composants.
 
La plupart des composants tiers se trouvent dans le répertoire "components".
 
La plupart des composants tiers se trouvent dans le répertoire "components".
  
 
=== Comment puis-je savoir si un composant fait partie de LCL ? ===
 
=== Comment puis-je savoir si un composant fait partie de LCL ? ===
  
Tous les composants LCL sont dans le répertoire "lcl". Une liste des composants appartenant à la LCL peut être consultée ici http://lazarus-ccr.sourceforge.net/docs/lcl/ . Si votre code source utilise des composants non listés sur cette page, vous avez peut être utilisé des composants qui ne font pas partie de la LCL.
+
Tous les composants LCL sont dans le répertoire "lcl". Une liste des composants appartenant à la LCL peut être consultée ici http://lazarus-ccr.sourceforge.net/docs/lcl/ . Si votre code source utilise des composants non listés sur cette page, vous avez peut-être utilisé des composants qui ne font pas partie de la LCL.
  
 
=== Puis-je écrire des plug-ins propriétaires pour Lazarus ? ===
 
=== Puis-je écrire des plug-ins propriétaires pour Lazarus ? ===
Line 522: Line 763:
 
Oui, la partie IDEIntf de l'EDI est sous licence LGPL avec la même exception, ce qui signifie que les structures de données communes de cette partie ne vous forceront pas à placer votre plug-in ou composant accessible à la conception sous licence GPL. Vous êtes libre de choisir n'importe quelle licence pour votre plug-in; nous ne voulons pas limiter votre choix. C'est ainsi que des plug-ins qui ne sont pas sous une licence compatible GPL sont autorisés. Notez cependant qu'il n'est pas autorisé de distribué une version compilée de Lazarus avec ces plugins non-GPL liés de manière statique; cependant, nous ne voyons pas ceci comme une limitation, puisque compiler Lazarus est facile.
 
Oui, la partie IDEIntf de l'EDI est sous licence LGPL avec la même exception, ce qui signifie que les structures de données communes de cette partie ne vous forceront pas à placer votre plug-in ou composant accessible à la conception sous licence GPL. Vous êtes libre de choisir n'importe quelle licence pour votre plug-in; nous ne voulons pas limiter votre choix. C'est ainsi que des plug-ins qui ne sont pas sous une licence compatible GPL sont autorisés. Notez cependant qu'il n'est pas autorisé de distribué une version compilée de Lazarus avec ces plugins non-GPL liés de manière statique; cependant, nous ne voyons pas ceci comme une limitation, puisque compiler Lazarus est facile.
  
== Contributors and Comments ==
+
== Utiliser le Forum ==
 +
=== Quelle est la manière correcte de poser des questions dans le forum ? ===
 +
La première consigne et la plus importante : ''toujours mentionner la version de Lazarus, la version de FPC, le jeu graphique (Gtk2...), l'architecture de CPU et le système d'exploitation (version complète) que vous utilisez.'' Ne pas dire seulement la version la plus récente. Bien préciser le numéro exact de version. Pour les instantanés, le numéro de révision et/ou la date sont aussi importants.
 +
 
 +
Quand vous posez une question de programmation, '''toujours essayer de donner quelque code source  qui démontre le problème'''. SVP, entourez votre code avec les balises [code][/code] (ou utilisez le bouton Insert code dans la barre d'outil de l'éditeur de post). Vos pouvez attacher des programmes complets comme des fichiers zip si vous le voulez. Utilisez "Lazarus/Projet/Publier le projet" pour vous aider
 +
 
 +
Si vous obtenez une erreur dans votre code '''toujours spécifier quelle est cette erreur'''. Simplement copier ce que dit le compilateur/débogueur/votre programme serait suffisant dans la plupart des cas. Si l'erreur survient à l'exécution, utilisez -gl et désactivez l'expansion en ligne (inlining) lors de la compilation ainsi votre programme peut générer une trace correcte.
 +
 
 +
Souvent une image est aussi vraiment utile. Vous pouvez héberger des images dans http://imageshack.us/ et d'autres sites web similaires puis poster un lien.
 +
 
 +
Essayez de donner à la fois une vue d'ensemble de haut niveau ('''quel but vous voulez atteindre''') et une vue plus détaillée du problème ('''comment vous tentez d'atteindre votre but'''). Souvent, il y a des façons de faire plus faciles que vous ne connaissez pas.
 +
 
 +
Finalement, assurez-vous que vous avez cherché/lu la documentation pertinente (p.ex. le [[FPC documentation|documentation FPC]] et le wiki Lazarus vois p.ex. [[Lazarus Documentation| Documentation Lazarus]]). Vous pouvez aussi [http://lazarus.freepascal.org/index.php?action=search chercher sur le forum]: d'autres personnes ont peut-être trouvé des solutions à des problèmes similaires. Si vous indiquez que vous avez déjà fait une partie du travail par vous-même, les gens seront plus incités à vous aider.
 +
 
 +
Pour plus de conseils sur la façon la plus maline de poser des questions, lire ceci: http://catb.org/esr/faqs/smart-questions.html
 +
 
 +
== Numérotage de version ==
 +
Voir la page [[Version Numbering]] pour une explication concernant les branches et les numéros de version de Lazarus.
 +
 
 +
== Problèmes/questions avec les anciennes versions de Lazarus/FPC ==
 +
Les questions concernant les anciennes versions de Lazarus/FPC et les notes sur les mises à niveau sont couvertes ci-dessous.
 +
 
 +
Souvent la meilleure solution est de mettre à niveau. Lisez les nombreuses [[:Category:Release_Notes|Notes de version]]
 +
 
 +
=== Pourquoi l'édition de lien est-elle si lente sur Windows ? [versions anciennes de Lazarus]===
 +
{{Note|Ce problème a été résolu dans FPC 2.2 et Lazarus 0.9.24. Veuillez mettre à niveau votre Lazarus si vous le pouvez. Pour les versions plus anciennes, lire le texte ci-dessous.}}
 +
 
 +
D'une manière générale, la compilation sur Windows prend plus de temps que sur d'autres plate-formes parce que l'éditeur de liens GNU utilisé par FreePascal est lent sur cette plate-forme. Ce problème affecte seulement Windows et est seulement sensible sur les ordinateurs relativement vieux (moins de 1Ghz) et sur ceux avec peu de RAM (128MB ou moins).
 +
 
 +
En outre, si vous liez intelligement la LCL, l'édition de lien sera beaucoup plus lente. Une étude à ce sujet est proposée ici : [[File size and smartlinking/fr|Taille de fichier et lien intelligent]]
 +
 
 +
Un éditeur de liens interne a été développé, mais n'a été disponible qu'à partir de la version 2.2 de Free Pascal. Il diminue nettement la durée de l'édition de lien.
 +
 
 +
=== L'ancien Lazarus ne supporte pas les ressources de style Windows ; conversion des ressources ''lrs'' ===
 +
Les anciennes versions de FPC (et donc Lazarus) ne supportent pas les ressources Windows (.rc/.res), mais seulement les fichiers ''LRS'' (Lazarus Resource files). Voir [[Lazarus Resources]].
 +
 
 +
Depuis la 0.9.30, Lazarus peut utiliser les ressources FPC. Cela signifie que vous pouvez supprimer les fichiers ''lrs'' pour les fiches et remplacer les directives Include <tt>{$I unit1.lrs}</tt> avec <tt>{$R *.lfm}</tt>.
 +
 
 +
== Voir aussi ==
 +
* [[Unit not found - How to find units]] information sur quoi faire quand vous obtenez les messages "unité non trouvée".
 +
 
 +
== Contributeurs et Commentaires ==
  
This page has been converted from the epikwiki [http://lazarus-ccr.sourceforge.net/index.php?wiki=LazarusFaq version].
+
Cette page a été convertie depuis le epikwiki [http://lazarus-ccr.sourceforge.net/index.php?wiki=LazarusFaq version].

Latest revision as of 23:50, 18 February 2020

العربية (ar) Deutsch (de) English (en) español (es) français (fr) magyar (hu) italiano (it) 日本語 (ja) 한국어 (ko) português (pt) русский (ru) slovenčina (sk) 中文(中国大陆)‎ (zh_CN) 中文(台灣)‎ (zh_TW)

Cette FAQ est copié de la FAQ du site www.freepascal.org, car il est plus facile maintenir et prolonger ce document wiki.

Général

Où puis-je trouver plus de FAQ ?

Voir le site Web officiel. Il y a une autre FAQ aussi sur ce site.

Qu'est-ce que Lazarus ?

Lazarus est environnement de développement intégré (EDI) multiplateforme qui permet de créer des programmes en Pascal Objet, visuels ou non. Il utilise le compilateur Free Pascal pour créer les exécutables. Son but est d'écrire et de compiler partout : vous devriez pouvoir recompiler votre programme source avec un Lazarus tournant sur un système d'exploitation supporté(ou avec un compilateur croisé) et obtenir un programme qui s'exécute sur ce système d'exploitation.

Pour de plus amples informations, voir le survol de Free Pascal et Lazarus.

Pourquoi les fichiers binaires produits sont-ils si volumineux ?

Les fichiers binaires sont volumineux parce qu'ils contiennent beaucoup d'informations de débogage nécessaires à l'utilisation de gdb (GNU Debugger).

Le compilateur a une option pour enlever l'information de débogage de l'exécutable (-Xs). En raison d'un bogue dans le compilateur (version 2.0.2 et antérieures), ceci ne fonctionnait pas correctement. Ce problème a été corrigé dans la version de développement du compilateur.

Vous pouvez utiliser un programme nommé "strip" pour enlever les symboles de débogage du fichier exécutable. Il est situé sous le répertoire de Lazarus lazarus\pp\bin\i386-win32\.

Tapez simplement "strip --strip-all <votre fichier exécutable avec le chemin >" sur la ligne de commande.

Si vous voulez rendre votre programme encore plus petit, vous devriez essayer UPX aussi. UPX est un très bon compresseur d'exécutables. Il n'aboutit pas à une surconsommation liée à la décompression sur place. Il bénéficie également d'une décompression très rapide (~10 MB/sec sur un Pentium 133).

Pour employer UPX, tapez simplement "upx <votre fichier exécutable avec le chemin>" sur la ligne de commande.

Après avoir employé à la fois strip et upx, un simple GUI programmé avec Lazarus donne :

  • ~ 700kb sur Linux
  • ~ 420kb sur Windows

Une réponse plus détaillée avec les inconvénients d'utiliser UPX est donnée sur Considérations de taille.

Il est également important de noter que le logiciel "bonjour le monde" de Lazarus inclut déjà une quantité énorme de fonctionnalisés :

  • Une librairie de traitement XML ;
  • Une librairie de traitement d'images pour les fichiers png, xpm, bmp et ico ;
  • Presque tous les composants graphiques de la bibliothèque de composants de Lazarus(LCL) ;
  • Toutes les Bibliothèques Runtime de Free Pascal ;
  • Les infos RTTI.


Par conséquent, la taille de l'exécutable Lazarus commence grand, mais se développe très lentement en raison du compilateur Free Pascal et de la façon dont les fiches Lazarus opèrent. Un projet C++ (juste un exemple, mais cette remarque s'applique à d'autres langages/outils) commence très petit avec un programme élémentaire comme 'bonjour le monde', mais se développe exponentiellement quand vous avez besoin de fonctionnalités pour écrire une application non triviale.

Lazarus vs cpp.png

Guide rapide pour réduire la taille des exécutables Lazarus/FPC

  • 1. Project|Compiler Options|Code|Smart Linkable (-CX) -> Coché
  • 2. Project|Compiler Options|Linking|Debugging| Décocher tout sauf Strip Symbols From Executable (-Xs)
  • 3. Project|Compiler Options|Linking|Link Style|Link Smart (-XX) -> Coché
Light bulb  Remarque: faites cela si vous ne voulez pas déboguer

Ai-je besoin de ppc386.cfg ou de fpc.cfg ?

Vous avez seulement besoin de fpc.cfg. De cette façon, le compilateur saura où trouver les bibliothèques.

Comment compiler Lazarus ?

Tapez quelque chose comme ceci :

$ cd lazarus
$ make clean all

Si vous voulez construire Lazarus avec un autre ensemble graphique (par exemple Qt supporté par Linux, Windows et OSX), il vous faut utiliser l'argument PLATFORM :

$ cd lazarus
$ make clean all LCL_PLATFORM=qt

Comment construire d'autres projets fondés sur la LCL ?

Si vous ne pouvez pas employer l'EDI pour construire vos applications, utilisez lazbuild. Il s'agit d'une version en ligne de commande de l'EDI pour construire des projets et des paquets Lazarus. Si vous voulez construire des applications LCL sans l'EDI et sans lazbuild, ajoutez les lignes suivantes à la fin de votre fpc.cfg

  # searchpath for other toolkits (Linux)
  -Fu/usr/lib/fpc/$fpcversion/units/$fpctarget/{YourToolKit}
  # searchpath for other toolkits (Windows)
 -Fu/{YourLazarusDirectory}/components/lazutils/lib/{platform}
 -Fu/{YourLazarusDirectory}/lcl/units/{platform}

-Fu/{YourLazarusDirectory}/lcl/units/{platform}/{YourToolKit}

Où {YourToolKit} peut être gtk2, gnome, qt ou win32.

Exécutez alors :

 ppc386 your.project.pp

Conseil : Ne pas oublier d'installer les paquets de développement pour votre trousse à outils, sinon vous pourriez recevoir un message comme : Linker message: cannot find -l.

Quelle version de FPC est exigée ?

  • Lazarus 1.0.8 nécessite au moins FPC 2.6.2.
  • Lazarus 1.0 nécessite au moins FPC 2.6.0.
  • Lazarus 1.2.0 nécessite au moins FPC 2.6.2.
  • Lazarus 1.2.4, 1.2.6 et 1.4 nécessitent au moins FPC 2.6.4 (dernières versions à ce jour).

Je ne peux pas compiler Lazarus

  1. Vérifiez si le compilateur a la version correcte.
  2. Vérifiez si les bibliothèques (fpc) sont de la même version.
  3. Vérifiez si le chemin d'installation du compilateur contient des espaces. S'assurer qu'il n'y en a pas !
  4. Vérifiez si vous avez un fichier fpc.cfg et pas un fichier obsolète ppc386.cfg.
  5. Vérifiez également les FAQs sur la dépendance par rapport aux systèmes d'exploitation.
  6. Si vous êtes encore en galère, demandez sur le forum ou dans la mailing list.

Comment embarquer un petit fichier dans un exécutable sans traîner un fichier séparé ? Comment embarquer une ressource ?

Les ressources Lazarus et les ressources de type Windows/FPC sont supportées.

Par exemple :

/your/lazarus/path/tools/lazres sound.lrs sound1.wav sound2.wav ...

va créer sound.lrs à partir de sound1.wav et de sound2.wav.

Incluez-le alors *après* le fichier lrs de la fiche:

...
initialization
{$i unit1.lrs} // ceci est le fichier ressource principal (en premier)
{$i sound.lrs} // fichier ressource défini par l'utilisateur

end.

Dans votre programme, vous pouvez alors utiliser :

Sound1AsString := LazarusResources.Find('sound1').Value;

Voir Lazarus Resources.

Que signifient les nombreuses extensions de fichier employées par Lazarus ?

La section Lazarus Tutorial/fr#Les fichiers de Lazarus explique quelques extensions par un exemple. En voici une courte liste :

Extension Type de fichier Description
.lpi Information de projet Lazarus Contient des réglages spécifiques au projet comme les réglages du compilateur et les paquets nécessaires. Enregistré en XML.
.lps Session de programme Lazarus Données personnelles comme la position du curseur, les fichiers dans l'éditeur de sources, modes personnels de construction. Enregistré en XML.
.lpr Programme Lazarus Source Pascal du programme principal.
.lfm Fiche Lazarus Informations d'initialisation sur tous les objets disposés sur les fiches et les modules des données (enregistré dans un format textuel spécifique à Lazarus, similaire au fichier *.dfm de Delphi. Les actions sont décrites dans un fichier source Pascal, dans un fichier *.pas correspondant).
.pas
.pp
.p
Code Pascal Code Pascal qui peut être associé à un fichier *.lfm (s'il décrit les actions d'une fiche/d'un module de données).
.lrs Ressource Lazarus Fichier de ressources généré par Lazarus. A ne pas confondre avec un fichier de ressources Windows. Ce fichier peut être créé avec l'outil lazres (dans le répertoire Lazarus/Tools) en utilisant la ligne de commande : lazres myfile.lrs myfile.lfm.
.ppu Unité compilée Code source compilé créé par le compilateur FPC pour chaque unité/programme.
.o Fichier objet Créé par le compilateur. Tout fichier .ppu a un fichier correspondant .o, nécessaire au lieur.
.lpk Information de paquet Lazarus Réglages spécifiques au paquet, comme les options de compilation et les paquets requis. Enregistré en XML.
.lrt Table de ressources Lazarus Table de chaînes de ressources Lazarus créée à l'enregistrement d'une fiche lfm quand l'i18n (internationalisation) est activée. Il contient les propriétés TTranslateString du fichier lfm. Ne pas les modifier manuellement : ils seront écrasés.
.rst Table de chaînes de ressources La table de chaînes de ressources créée par le compilateur pour chaque unité avec une section resourcestring. Ne pas éditer ce fichier qui sera écrasé au prochain enregistrement.
.po Messages GNU gettext Quand l'i18n est activée, l'EDI crée/met à jour les fichiers .po avec les chaînes de ressources dans les fichiers .rst et .lrt.

Pourquoi les propriétés TForm.ClientWidth/ClientHeight sont-elles les mêmes que TForm.Width/Height ?

Les TForm.Width/Height n'incluent pas le cadre, car il n'y a pas de manière fiable de récupérer la taille du cadre sur toutes les plates-formes. Sans moyen fiable, la LCL déplacerait les fiches sur l'écran ou les redimensionnerait sans fin.

Il se peut que ceci soit changé quand il y aura un moyen fiable pour obtenir la taille et la position d'une fenêtre avec son cadre sur toutes les plates-formes. Pour conserver la compatibilité avec les anciennes versions de LCL, un numéro de version et des méthodes supplémentaires seraient alors ajoutés.

Erreurs

Référence circulaire des unités a et b

Un problème courant est rencontré par le nouveau programmeur quand il veut créer deux fiches qui font référence chacune aux propriétés de l'autre. L'erreur survient uniquement dans les clauses uses de la section interface ; pas de problème en revanche dans la section implementation.

Exemples :

Celui-ci provoque une erreur :

unit a;

interface

uses b;

implementation

end.
unit b;

interface

uses a;

implementation

end.

Contrairement à celui-ci :

unit a;

interface

implementation

uses b;

end.
unit b;

interface

implementation

uses a;

end.

Attention : il faut par conséquent s'assurer que les dépendances ne se trouvent que dans les sections implementation.

Lorsque je tape var mytext: text; pour déclarer un fichier texte, j'obtiens "Unit1.pas(32,15) Error: Error in type definition". Comment puis-je corriger cela ?

La classe TControl possède une propriété Text. Dans une méthode de fiche, qui a une visibilité supérieure, il y a conflit avec le type Text de l'unité System. Vous pouvez utiliser le type TextFile, qui est simplement un alias pour le type Text ou vous pouvez ajouter l'unité à la définition du type.

var
  MyTextFile: TextFile;
  MyText: System.Text;

Un problème de collision de nom similaire existe avec l'assignation et la fermeture d'un fichier texte. TForm possède des méthodes Assign et Close. Vous pouvez utiliser AssignFile et CloseFile ou ajouter le nom de l'unité System.

J'obtiens une erreur lorsque j'utilise Printer.BeginDoc.

L'unité Printers doit être ajoutée à la section uses.

Le paquet Printer4Lazarus doit être ajouté au pré-requis de votre projet dans l'IDE sous : Project|Project Inspector|Add|New Requirement|Package Name

Si le paquet Printer4Lazarus package n'est pas dans la liste lorsque vous ouvrez la boîte de liste, il doit être installé. Le paquet fait partie de l'installation de Lazarus et peut être trouvé dans : [lazarus installed directory]\components\printers

Si vous utilisez les dossiers d'installation, par défaut [lazarus installed directory] est:

  • Windows: c:\lazarus
  • Linux: /usr/lib/lazarus

Quand j'essaie de compiler un projet, j'obtiens un message d'erreur "Cannot find Unit ..."

Veuillez vous reporter à l'unité non trouvée - Comment trouver les unités

Pour de l'information sur l'erreur "Cannot find unit interfaces", voir la prochaine section.

"Cannot find Unit interfaces". Comment puis-je résoudre ce problème ?

Cette erreur signifie que le compilateur ne peut pas trouver le fichier 'interfaces.ppu' ou que le fichier est trouvé mais qu'il est mauvais ou obsolète (la date du fichier .ppu est plus ancienne que la date du compilateur lui-même). Vérifier les options du compilateur peut aider à résoudre ce problème, en passant par : Options du compilateur... Utilisez alors le bouton Test en bas de la fenêtre. Ce test vérifiera aussi que les variables {TargetCPU} et {TargetOS} sont définies correctement.

L'unité en cause compilée peut être trouvée dans le répertoire {LazarusDir}\lcl\units\{TargetCPU}-{TargetOS}\{LCLWidgetSet}\interfaces.ppu. Il est normal d'avoir de multiples versions de interfaces.ppu pour permettre la compilation avec différents ensembles graphiques, mais dans des répertoires adaptés. Assurez-vous que l'unité est seulement dans le répertoire indiqué plus haut. Si vous avez des versions multiples de interfaces.ppu, vous avez probablement une configuration erronée (par exemple, vous avez ajouté un répertoire lcl à un chemin de recherche). Supprimez tous les interfaces.ppu, excepté celui dans le répertoire visé.

Si vous choisissez un ensemble de composants graphiques différent que celui que vous avez utilisé pour construire Lazarus, vous devez reconstruire la bibliothèque LCL pour cet ensemble de composants graphiques.

Si elle est là mais que vous obtenez cette erreur, vous employez un compilateur/rtl différent pour compiler votre projet de celui employé pour la compilation de votre EDI Lazarus.

Vous pouvez essayer une des solutions suivantes :

  • Reconstruisez la bibliothèque LCL (ou Lazarus complètement) avec le compilateur choisi dans les options d'environnement. Vous pouvez faire ceci avec Outils -> Construire Lazarus. Vérifiez en premier lieu les paramètres courants dans Outils -> Configurer "Construire Lazarus".
  • Changez le compilateur dans les options d'environnement vers celui utilisé pour compiler Lazarus. Regardez soigneusement dans les options d'environnement pour voir si un chemin correct est choisi pour le répertoire de Lazarus et pour celui de FPC. Vérifiez qu'il y a qu'une version du fichier de configuration du compilateur fpc.cfg - il devrait résider dans le répertoire /etc/ pour les systèmes Linux/Unix ou dans le même répertoire que le compilateur fpc pour les systèmes Windows. Essayez d'exécuter "fpc -vt bogus" pour vérifier quel fichier fpc.cfg est employé par le système. Des copies fautives s'introduisent souvent après une mise à jour du compilateur ; elles peuvent être trouvées dans le répertoire local ou dans le même répertoire que celui dans lequel a été construit le nouveau compilateur. SUPPRIMEZ CES DERNIERS !
  • Vous pouvez également essayer de changer l'ensemble de composants graphiques actuellement choisi pour le projet. Par exemple, le projet "objectinspector" qui accompagne Lazarus est paramétré à gtk par défaut. Compiler ce projet va sûrement vous donner "Can't find unit interfaces" dans la plate-forme Windows. Changer le jeu de composants graphiques à default(Win32) dans Projet | Options du compilateur ... | Type composant graphique LCL (divers) devrait corriger ce problème.

Quand je compile un projet qui utilise une unité LCL, j'obtiens une erreur du lieur.

Voici un exemple d'une telle erreur :

/path/to/lazarus/lcl/units/x86_64-linux/wsimglist.o: In function `REGISTERCUSTOMIMAGELIST':
/path/to/lazarus/lcl//widgetset/wsimglist.pp:266: undefined reference to `WSRegisterCustomImageList'
  • Assurez-vous que votre projet utilise le paquet LCL. Vous pouvez vérifier cela dans l'inspecteur de projet.
  • Assurez-vous que l'unité "Interfaces" est utilisée comme l'une des premières unités de votre programme.
Light bulb  Remarque: Ces fonctions sont implémentées comme des backend de la LCL. En ajoutant les interfaces d'unité, vous liez un backend LCL à votre programme.

à la ligne :{$R *.DFM} - Comment puis je résoudre ce problème ?

Lazarus (ou mieux Linux) ne sait rien des ressources, ainsi vous ne pouvez pas les employer comme vous le feriez avec Delphi/win32. Cependant Lazarus emploie une méthode assez compatible avec ce dernier. Vous pouvez par conséquent employer vos dispositions de fiche Delphi (fichiers .dfm) si vous suivez ces étapes :

  • Vous avez besoin d'une version textuelle des fichiers .dfm. Delphi5 et au-delà en produisent par défaut. Si vous avez des fichiers plus anciens : Alt+F12 pour voir la disposition de fiche comme du texte et coller/copier.
  • Quand vous avez un texte du fichier .dfm, copiez-le simplement vers un fichier .lfm.
  • Créez un fichier avec lazres (dans lazarus/tools): lazres yourform.lrs yourform.lfm
  • Ajoutez la section suivante d'initialisation :
     initialization
     {$I yourform.lrs}

Veuillez garder à l'esprit que toutes les propriétés dans le fichier dfm ne sont toujours pas supportées par Lazarus. Vous pouvez par conséquent obtenir un crash.

Changement : depuis FPC 2.4.0, les ressources style Delphi sont supportées et vous n'avez plus besoin de changer quoi que ce soit. Même Lazarus SVN les utilise par défaut. Note : il est toujours recommandé d'utiliser le convertisseur Lazarus de projets Delphi, car il peut encore y avoir des propriétés non supportées.

Il est aussi possible pour un projet comprenant de nombreuses fiches, toutes en dfm binaire, de les convertir en fichier texte grâce à l'utilitaire convert.exe livré avec Delphi (cela est valable jusqu'à Delphi 7, à vérifier pour les versions ultérieures).

'Identifier not found LazarusResources'.

En créant une fiche, Lazarus ajoute automatiquement quelques unités supplémentaires à la section uses de l'unité de votre fiche. Pendant la conversion d'une unité Delphi vers une unité Lazarus, cette procédure automatique ne se produit pas. Ainsi avez-vous à ajouter vous-même LResources à la section uses de l'unité de la fiche.

En accédant aux événements des objets (par exemple l'événement onclick d'un bouton), j'obtiens l'erreur suivante : ERROR unit not found: stdCtrls. Que puis-je faire ?

Assurez-vous, dans Projet -> Inspecteur de projet, que votre projet dépend du paquet 'LCL' et que vous avez installé les fichiers sources de FPC.

Lazarus est l'EDI et la bibliothèque de composants visuels est LCL. Tous les autres éléments (comme les bases de données, FCL et RTL) sont fournis par FPC. L'EDI a besoin des chemins vers tous les fichiers sources pour fonctionner correctement.

Le chemin des fichiers sources de FPC peut être paramétré via : Configuration -> Options d'environnement... -> Fichiers -> Répertoire des sources de FPC

'Fatal: Internal error XXXXYYZZW'

Une erreur interne est une erreur du compilateur dont la survenue n'était pas attendue (mais il est préparé pour traquer facilement le problème en fournissant le code XXXXYYZZW). Toute erreur interne est un bogue, aussi est-il recommandé de la signaler dans le pisteur de bogues (avec un court exemple illustrant l'erreur interne).

Débogueur

Voir also GDB Debugger Tips.

Comment puis-je régler/configurer pour le débogage

Configurer le débogueur

Comment puis-je inspecter les propriétés?

Vous devez avoir FPC 2.4 ou plus récent.

Si vous compilez votre application en utilisant -gw (info de debug dwarf), vous devriez être capable d'inspecter les propriétés.

Light bulb  Remarque: Cela est uniquement vrai pour les propriétés qui correspondent directement à une variable (le getter est une champ pas une fonction).

Si votre propriété retourne la valeur d'une fonction, il est très dangereux de l'évaluer/inspecter. Ceci requiert de l'appeler, ce qui par effet de bord peut modifier aussi quelques autres variables. Ceci signifie que l'état de votre application sera altéré dans le débogueur et dans toute exécution de code à venir, le débogage ou les inspections retourneraient des résultats incorrects.

La capacité optionnelle d'inspecter explicitement les résultats des fonctions (avec les risques décrits) et donc l'appel de code depuis le débogueur n'est pas encore implémenté.

Pourquoi le débogueur ne montre pas certaines Variables/Structures ("no such symbol"/"incomplete type")

Pour des problèmes de débogage:

  • propriétés
  • Array of ... (tableau dynamique)
  • Variables dans des procédures imbriquées
  • "no such symbol in context"
  • "incomplete type"

Veuillez voir Conseils sur le débogeur GDB

Comment puis-je déboguer les composants FCL depuis les paquets avec Lazarus ?

Les composants FCL et les classes sont construites sans informations de débogage par défaut et en conséquence, GDB ne peut pas accéder aux et propriétés de composants. Pour construire les composants du paquet, il faut les reconstruire avec la bascule information de débogage en ligne "-gl".

Cet exemple suppose que vous avez une distribution Linux avec une installation dans /usr/local/ et que le paquet base de données fcl-db est celui qui va contenir les informations de débogage en ligne. Alors que le fcl-db est utilisé dans cet exemple, vous pouvez exécuter cette commande make sur tous les paquets inclus.

Avant de commencer, vous avez besoin de localiser votre chemin FPC en examinant votre fichier de configuration FPC. Le fichier (fpc.cfg) est localisé dans /etc/fpc.cfg. Affichez le contenu du fpc.cfg et trouvez le chemin d'installation de FPC. Recherchez une ligne démarrant avec -Fu dans le fichier :

-Fu/usr/local/lib/fpc/$fpcversion/units/$fpctarget/*


Les scripts Make installent des unités dans INSTALL_PATH/lib/fpc/$fpcversion/units/$fpctarget/, ainsi vous devez être sûr que /usr/local est le répertoire d'installation et devrait être affecté à INSTALL_PREFIX, sinon les scripts Make placeront les unités là où elles ne doivent pas être ou le script Make échouera.

Etape 1: Ouvrir un terminal shell
Etape 2: cd /user/local/share/src/fpc-2.3.1/fpc/fcl-db/
Etape 3: sudo make clean all install INSTALL_PREFIX=/usr/local OPT=-gl

Light bulb  Remarque: le paramètre INSTALL_PREFIX devrait être proprement configuré pour installer les unités.

Dans l'exemple ci-dessous /usr/local est le chemin par défaut sous Linux mais peut être différent sur d'autres systèmes d'exploitation.

make clean all install INSTALL_PREFIX=/usr/local OPT=-gl

A la fin, après reconstruction de toute unité FCL, vous pouvez vouloir tout aussi bien reconstruire la LCL.

Problèmes avec GDB sur Mac OSX

Reportez-vous là pour les problèmes de débogage sous Mac

Comment utiliser un fichier log pour le débogage ?

Lazarus fournit un framework basique dans l'unité LazLogger. Regardez cette page pour plus de détails.

Comment puis-je utiliser un fichier log pour le débogage de l'EDI ?

Lazarus utilise lui-même LazLogger.

Ceci signifie que vous pouvez exécuter Lazarus avec

--debug-log=lazarusdebuglog.txt

Si ce n'est pas suffisant: dans l'EDI, l'ampleur de l'information rapportée peut être contrôlée par --debug-enable. Voir dans --help pour la liste des mots-clés, ou installer le paquet IdeLazLogger.

Si vous voulez imprimer sur la console (le plus utile pour Windows), ajoutez {$APPTYPE console} dans lazarus.pp ; ensuite reconstruisez Lazarus.

Voir aussi Console Mode Pascal#Run in IDE with redirected output

Détails

La LCL possède la procédure LCLProc pour écrire sur la sortie de débogage:

  • DebugLn: fonctionne presque comme WriteLn, mais accepte uniquement des chaînes.
  • DbgOut: fonctionne presque comme Write, mais accepte uniquement des chaînes.

Dans des conditions normales la sortie est écrite sur stdout. Si stdout est fermée, (par exemple quand l'application est {$AppType Gui} ou compilée avec -WG sous Windows), aucune sortie n'est écrite.

La sortie de déboggage peu également être écrite vers un fichier. L'unité LCLProc vérifie dans son initialisation les paramètres de la ligne de commande pour '--debug-log=<file>'. Si trouvé, elle envoie la sortie de déboggage vers <file>.

Si elle ne trouve pas de paramètres de ligne de commande --debug-log, elle vérifie si la variable d'environnement xxx_debuglog existe, xxx étant le nom du fichier programme sans l'extension. Pour Lazarus ce serait lazarus_debuglog. Si une telle variable d'environnement existe, elle utilise comme fichier de sortie de déboggage. Par exemple, si vous faites:

set lazarus_debuglog=c:\lazarus\debug.txt

la sortie de déboggage sera écrite dans c:\lazarus\debug.txt.

Etant donnée que c'est implémenté dans lclproc, chaque application utilisant lclproc peut profiter de cette sortie.

Contribuer / Faire changer Lazarus

J'ai créé un patch pour "docker" la fiche des messages de l'EDI en bas de l'éditeur de code source

De tels patchs ne seront pas appliqués car ils ne sont qu'une partie du docking voulu. Le but est de créer un gestionnaire complet de dock et de l'utiliser. Un gestionnaire complet de dock peut "docker" toutes les fenêtres de l'IDE et il laisse l'utilisateur en disposer comme il le veut. Par exemple, docker la fenêtre de message au dessus ou au dessous ou encore pas du tout. Par exemple :

+-------------------++--+
|menu               ||  |
+-------------------+|  |
+--++---------------+|  |
|PI|| Source Editor ||CE|
+--+|               ||  |
+--+|               ||  |
|  |+---------------++--+
|OI|+-------------------+
|  ||messages           |
+--++-------------------+

Le gestionnaire de dock peut enregistrer la disposition et la restaurer au prochain chargement. De préférence, le docking peut se faire dans les pages aussi. Il ne nécessite pas l'emploi du drag and drop. Tous les patchs mettant en oeuvre le docking sans un gestionnaire rend difficile l'implémentation d'un réel gestionnaire de dock et sera rejeté.

Un exemple pour un tel gestionnaire de dock est le paquet anchordockdsgn.

J'ai corrigé/amélioré Lazarus. Comment puis-je ajouter mes changements au code source officiel de Lazarus ?

Créez un patch et envoyez-le aux développeurs. Pour les détails, voir Créer un Patch.

Comment puis-je installer plus d'une copie de Lazarus ?

Voir Multiple Lazarus

Comment puis-je devenir un développeur Lazarus et accéder à la gestion de SVN et du traqueur de bugs ?

En premier lieu, vous devez apprendre Lazarus, pour prouvez votre connaissance et votre compétence. Commencez par lire l'article Wiki Lazarus Documentation, lire le code source de Lazarus, jeter un oeil dans le traqueur de bug de Lazarus, corriger quelques bugs et si vous pensez être prêt, contactez les développeurs sur la liste de diffusion.

Où est/sont défini(e)(s)...

Les Constantes de Virtual key

Les constantes de Virtual key sont définies dans LCLType. Ajoutez LCLtype à votre uses.

Utilisation de l'IDE

Comment puis-utiliser l'"identifier completion"?

Vous pouvez invoquer la completion d'identifiant en pressant [ctrl][space]. Dans le menu Configuration -> Options de l'éditeur -> Audit de Code -> Dispositifs Automatiques vous pouvez configurer à quelle vitesse cela apparaître automatiquement.

Puis-je changer les polices et couleurs de l'éditeur de code ?

Oui, voir le menu Tools -> Options et utiliser les sections Editeur/Affichage et couleurs. Sous Windows, vous pouvez trouver que la police par défaut Courier (au d'autre typographie) est soit trop dure soit trop douce, soit de sélectionner/désélectionner 'Désactiver l'anti-crénelage'. Les polices TrueType, telle que la libre "Bitstream Vera Sans Mono" disponible dans [1]. (Pour installer une nouvelle police, décompresser et copier les fichiers dans le répertoire adapté. Dans Windows XP, vous aurez besoin d'utiliser la section Polices du panneau de contrôle. Dans Windows 7, vous pouvez sélectionner tous les fichiers de police, faites un clic droit et trouver une option 'Installer' dans le menu surgissant).

Linux

Comment puis-je déboguer sous Linux sans IDE?

D'abord vous avez besoin d'un débogueur. gdb est le débogueur standard sous Linux et il y a plusieurs interfaces GUI disponibles. L'une des plus courantes est ddd, qui fait partie de la plupart des distributions courantes. Pour compiler Lazarus/lcl avec les informations de débogage, vous devriez utiliser les commandes suivantes pour débuter une session de débogage:

 $ make clean; make OPT=-dDEBUG
 $ ddd lazarus

Soyez prévenu cependant que ddd n'est pas aussi confortable que par exemple le débogueur de Lazarus. Spécialement si c'est pour voir le contenu d'une variable vous devez prendre en compte le fait que ddd/gdb sont sensibles à la casse alors que Pascal y est insensible. Par conséquent, vous devez à taper tous les noms de variables en majuscule pour voir leur contenu. Pour plus d'information, jetez un oeil dans les manuels de FPC.

Je peux désormais débogguer mais ddd ne trouve pas mes sources ou prétend qu'ils ne contiennent pas de code. Qu'est ce donc?

Ceci est un problème relatif au chemin avec soit gdb soit ddd. Vous pouvez éviter ceci:

  • Utilisez la commande "Changer de Dossier" du menu de ddd et choisissez le dossier où sont situées les sources. L'inconvénient de cette méthode est que maintenant vous ne pouvez plus utiliser la source du programme avec lequel vous avez commencé (par ex: lazarus). Donc il se peut qu'il soit nécessaire de changer de dossier plusieurs fois.
  • Dans ddd, allez dans [Edit] [gdb-settings] et configurez le dossier de recherche.
  • Créeez un fichier $(HOME)/.gdbinit comme ci dessous:
     directory /your/path/to/lazarus
     directory /your/path/to/lazarus/lcl
     directory /your/path/to/lazarus/lcl/include

J'obtiens une erreur durant l'édition de lien qui fait état de: /usr/bin/ld can't find -l<some lib>

Par exemple:

 /usr/bin/ld: cannot find -lgdk

Ceci signifie qu'une bibliothèque externe n'a pas été trouvée. Dans le cas de dessus sous Linux, cela signifie que la libgdk.so ou libgdk.a n'a pas été trouvée. Dans le cas de gdk, le paquet est appelé dans la distribution Fedora Core: 'gtk+-devel-1.2.10-33'.

Distributions basées sur les paquets
Vous devez installer le paquet qui met à disposition les fichiers lib<somelib>.so ou lib<somelib>.a. Les bibliothèques dynamiques sous Linux ont pour extension .so, alors que les bibliotèques statiques ont pour extension .a. Sur certaines distributions Linux, vous avez installé le paquet (rpm, deb) <nom de paquet> qui met à disposition <some lib>, mais vous avez également besoin du paquet de développement (rpm, deb), normallement nommé <nom de paquet>-dev, qui contient le .a (bibliothèque statique) et/ou le .so (bibliothèque dynamique).
Quelques distros ont des commandes pour trouver quel paquet contient un fichier:
Mandriva
urpmf lib<somelib>.so
listera tous les paquets contenant le fichier nommé lib<somelib>.so, vous devrez installer ceux se terminant par -devel.
Debian
installer l'utilitaire apt-file (apt-get install apt-file) ensuite
apt-file search lib<somelib>.so
listera tous les paquets contenant le fichier nommé lib<somelib>.so, vous devrez installer ceux se terminant par -dev.
SuSE
SuSE installe les bibliothèques gtk devel dans /opt/gnome/lib (or /opt/gnome/lib64 pour 64 bits), qui n'est pas le chemin standard aux bibliothèques. Ajoutez-le simplement dans votre /etc/fpc.cfg. (-Fl/opt/gnome/lib).
Distributions basées sur les sources et la Compilation Manuelle(LFS)
Assurez-vous qu'il y ait un lib<somelib>.a dans le path, et qu'il contient la bonne version. Pour permettre au linker de trouver la bibliothèque dynamique, créez un lien symbolique appelé lib<some lib>.so vers lib<some lib><version>-x,y.so si nécessaire (et/ou pour les bibliothèques statiques; lib<some lib>.a vers lib<some lib><version>-x,y.a).
FreeBSD :
Comme pour les distros basées sur les sources, assurez-vous aussi que vous avez -Fl/usr/local/lib dans votre chemin de bibliothèques de fpc.cfg et/ou Lazarus. Gardez à l'esprit que GTK1.2 a "gtk12" pour nom de package sous FreeBSD. (idem pour glib) NOTE: Cela a changé depuis. Les nouveaux portages ont pour nom gtk-12 et glib-12. Vous pouvez vous faire avoir sur ce problème, car FPC requiert les "-less", vous aurez besoin de les symlinker comme ceci:
# as root
cd /usr/local/lib && ln -s libglib-12.so libglib12.so
cd /usr/X11R6/lib && ln -s libgtk-12.so libgtk12.so
cd /usr/X11R6/lib && ln -s libgdk-12.so libgdk12.so
NetBSD :
Comme les distros basées sur les sources, assurez-vous aussi que vous avez -Fl/usr/pkg/lib dans votre chemin de bibliothèques de fpc.cfg et/ou Lazarus.
Fedora :
Dans le panneau "Ajouter/Supprimer un logiciel", recherchez: "gtk2-devel", "glibc-devel" (voir ici), "libx11-devel"

Comment puis-je convertir un projet Kylix 2 en projet Lazarus?

C'est à peu près la même chose que de convertir un projet Kylix en un projet Delphi/VCL.

La LCL (Lazarus Component Library) essaie d'être compatible avec la VCL de Delphi. Kylix CLX essaie d'être compatible avec QT. Voici quelques conseils généraux:

  • Renommez toutes les CLX Q-units utilisées comme QForms, QControls, QGraphics, ... en leur équivalent VCL: Forms, Controls, Graphics, ...
  • Ajoutez LResources à la section uses de chaque source de fiche
  • Renamez ou copiez tous les fichiers .xfm en fichiers .lfm.
  • Renamez ou copiez le fichier .dpr en fichier .lpr.
  • Ajoutez "Interfaces" à la section uses dans le fichier .lpr.
  • Retirez la directive {$R *.res}
  • Retirez la directive {$R *.xfm}
  • Ajoutez les directives {$mode objfpc}{$H+} ou {$mode delphi}{$H+} aux fichiers .pas et .lpr
  • Ajoutez une section initialization à la fin de chaque source de fiche et ajoutez une directive include pour le fichier .lrs (lazarus resource file):
 initialization
   {$I unit1.lrs}
Les fichiers .lrs files peuvent être créés via l'utilitaire lazres dans: (lazarusdir)/tools/lazres.
Par exemple: ./lazres unit1.lrs unit1.lfm
  • Fixez les différences. La LCL ne supporte pas actuellement toutes les propriétés de la VCL et le CLX n'est pas complètement compatible avec la VCL.
  • Pour le rendre plus indépendant de la plate-forme, éliminez les références à l'unité libc (qui est déprécié) en les substituant avec des unités natives FPC comme baseunix/unix tant que possible. Cela sera nécessaire pour supporter d'autres cibles que Linux/x86 (comprenant OS X, FreeBSD et Linux/x86_64)

Quand je compile Lazarus le compilateur ne peut pas trouver une unité. ex: gtkint.pp(17,16) Fatal: Can't find unit GLIB

1. Vérifiez un rebuild propre: faites un 'make clean all'

2. Vérifiez que le compilateur a une version correcte (2.0.4 ou supérieure)

3. Vérifiez que le compilateur utilise le bon fichier de cconfiguration. L'installation normale crée /etc/fpc.cfg. Mais fpc cherche également ~/.ppc386.cfg, ~/.fpc.cfg, /etc/ppc386.cfg et il utilise uniquement le premier qu'il rencontre.

Conseil: Vous pouvez voir quel fichier de configuration est utilisé avec 'ppc386 -vt bogus'
Retirez tout ppc386.cfg du fait qu'il est réellement obsolète.

4. Vérifiez que le fichier de configuration (/etc/fpc.cfg) contient les chemins d'accès corrects à vos libs fpc. Il doit y avoir trois lignes comme celles-ci:

   -Fu/usr/lib/fpc/$fpcversion/units/$fpctarget
   -Fu/usr/lib/fpc/$fpcversion/units/$fpctarget/rtl
   -Fu/usr/lib/fpc/$fpcversion/units/$fpctarget/*
La première partie de ces trois chemins (/usr/lib/fpc) dépend de votre système. Sur certains systèmes cela peut être par exemple /usr/local/lib/fpc/... .
Conseil: Vous pouvez voir vos searchpaths avec 'ppc386 -vt bogus'

5. Vérifiez que le fichier de configuration (/etc/fpc.cfg) ne contient pas de chemins de recherche vers les fichiers source de la LCL (.pp, .pas):

 interdit: -Fu(lazarus_source_directory)/lcl
 interdit: -Fu(lazarus_source_directory)/lcl/interfaces/gtk
Si vous voulez ajouter la LCL à tous vos projets FPC, assurez-vous que les deux chemins ressemblent aux suivants et sont placés après les chemins de lib fpc précédents:
 -Fu(lazarus_source_directory)/lcl/units/$fpctarget
 -Fu(lazarus_source_directory)/lcl/units/$fpctarget/gtk

6. Vérifiez que l'unité manquante (glib.ppu) existe dans votre dossier lib de fpc. Par exemple gtk.ppu peut être trouvé dans /usr/lib/fpc/$fpcversion/units/i386-linux/gtk/. S'il n'existe pas, fpc lib est corrompu et devrait être réinstallé.

7. Vérifiez si les sources sont dans un dossier NFS monté. Dans certains cas, les mises à jour de NFS créent les fichiers incorrectement. Essayez de déplacer ces sources dans un dossier non-NFS et compilez d'ici.

8. Si vous n'avez toujours pas réussi, essayez d'utiliser le script samplecfg comme suit:

# cd /usr/lib/fpc/version/

# sudo ./samplecfg /usr/lib/fpc/\$version /etc

Light bulb  Remarque: Ne mettez pas - / - après etc car si cous le faites le système va créer un fichier - /etc/fpc.cfg/fpc.cfg. En fait, nous voulons que samplecfg fasse un fichier - /etc/fpc.cfg - et non un dossier /etc/fpc.cfg.

J'ai installé la version binaire, mais quand je compile un projet simple, Lazarus me donne: Fatal: Can't find unit CONTROLS

Vous utilisez probablement un paquet fpc plus récent que celui utilisé pour construire les binaires de Lazarus. La meilleure solution est de télécharger les sources et de compiler Lazarus manuellement. Vous pouvez télécharger le snapshot du source ou obtenir le source via svn:

$ bash
$ svn checkout http://svn.freepascal.org/svn/lazarus/trunk lazarus
$ cd lazarus
$ make clean all

Assurez-vous que Lazarus a le dossier du nouveau source: Environment->General Options->Files->Lazarus Directory Top

Lazarus compiles, but linking fails with: libgdk-pixbuf not found

Installer la bibliothèque gdk-pixbuf pour gtk1.x:

Où trouver la bibliothèque gdk-pixbuf:

RPMs: http://rpmfind.net/linux/rpm2html/search.php?query=gdk-pixbuf&submit=Search+...&system=&arch=

Paquet Debian: libgdk-pixbuf-dev

Sources: ftp://ftp.gnome.org/pub/gnome/unstable/sources/gdk-pixbuf/

Ubuntu 8.10:

Si vous compilez Lazarus avec GTK 2.0 vous obtiendrez une erreur "libgdk-pixbuf2.0" non trouvée. Installez juste libgtk2.0-dev en utilisant apt de cette façon:

apt-get install libgtk2.0-dev

Comment désactiver l'utilisation dans Lazarus: Dans Outils-> Configurer "Création de Lazarus", ajouter l'option '-dNoGdkPixBufLib'.

ou par la ligne de commande: "make clean all OPT=-dNoGdkPixBufLib".

J'ai SuSE et j'obtiens /usr/bin/ld: ne peut trouver -lgtk Erreur: Erreur pendant l'édition de lien

SuSE installe les bibliothèques gtk devel sous /opt/gnome/lib (ou gnome/lib64 pour le 64 bits),qui n'est pas un chemin de bibliothèque standard. Ajoutez-le simplement dans votre /etc/fpc.cfg. (-Fl/opt/gnome/lib).

J'ai Kubuntu et j'obtiens /usr/bin/ld: ne peut trouver -lgtk-x11-2.0

Vous pouvez soit utiliser le backend QT ou GTK2. Par défaut, c'est GTK2. Pour GTK2, installer le paquet kubuntu libgtk2.0-dev.

Lazarus s'écrase avec une erreur d'exécution 211 après avoir installé un composant

Après que j'ai installé un composant, Lazarus plante avec le message suivant:

Threading has been used before cthreads was initialized.
Make cthreads one of the first units in your uses clause.
Runtime error 211 at $0066E188

Comment puis-je corriger ceci?

Votre composant fraichement installé utilise des threads. FPC sous *nix n'intègre pas automatiquement le support du threading, mais il doit être initialisé. L'initialisation est réalisée dans l'unité cthreads. Toute application utilisant le composant a besoin d'ajouter cette unité dans la clause 'uses' du programme principal. Lazarus lui-même ne fait pas exception. Ceci peut être fait de deux façons:

1) Ouvrez le paquet. Dans l'éditeur de paquet, cliquez sur Options. Dans la page Utilisation ajoutez dans les options personnalisées -dUseCThreads. Puis reconstruisez l'EDI. De cette manière, l'unité 'cthreads' sera automatiquement utilisée par l'IDE sous Unix et les cthreads sont initialisés.

2) Afin d'éviter de modifier le paquet, une option du compilateur FPC peut être utilisée directement. Ouvrez le menu Outils->Configurer "Création de Lazarus", un dialogue sera affiché ; dans le champ "Options:" tapez -Facthreads puis pressez sur le bouton "Ok". La prochaine étape est d'installer le paquet. Lazarus sera reconstruit avec l'option -Facthreads, ce qui signifie qu'il traitera le programme principal comme si l'unité cthreads était la première dans la clause uses.

Conseil: Peut-être votre ancien (sans plantage) exécutable Lazarus est enregistré comme lazarus.old dans le même répertoire que le Lazarus qui plante..

Voir aussi Multithreaded Application Tutorial#Units needed for a multithreaded application

Quand j'exécute un programme avec des threads j'obtiens l'erreur d'exécution 232

Le message d'erreur complet est:

This binary has no thread support compiled in.
Recompile the application with a thread-driver in the program uses
clause before other units using thread.
Runtime error 232

Solution: Ajoutez cthreads comme première unité de la clause uses du programme principal, habituellement le fichier .lpr.

J'ai Ubuntu Breezy et mes polices dans l'EDI Lazarus paraissent trop grosse

Si Lazarus est compilé avec Gtk1.2, les réglages dans les Préférences Gnome/Police n'ont pas d'effet comme dans Gtk2. Vous pouvez essayer cette solution: Créez un fichier nommé .gtkrc.mine dans votre répertoire personnel si ce n'est déjà le cas et ajoutez-lui ces lignes :

style "default-text" {
       fontset = "-*-arial-medium-r-normal--*-100-*-*-*-*-iso8859-1,\
                  -*-helvetica-medium-r-normal--*-100-*-*-*-*-*-*"
}

class "GtkWidget" style "default-text"

Si ce n'est pas suffisant, essayez de créer un lien symbolique '.gtkrc' vers '.gtkrc.mine'. Cela fonctionne de cette façon sous Xubuntu 7.10, Mandriva 2009.0 KDE3.

Comment mon programme gtk peut-il utiliser les fichiers rc personnalisés ?

Option a) Nommez votre fichier rc yourprogram.gtkrc et mettez-le dans le même répertoire que l'exécutable.

Option b) Utilisez l'unité GtkInt et appelez GTKWidgetSet.SetRCFilename('your_preferred_rc_file'); Le meilleur est quand l'appel précède Application.Initialize dans votre fichier .lpr avec {$IFDEF LCLGtk}.

Option c) Utilisez l'unité gtk2 et appelez gtk_rc_parse('your_rc_file')); et gtk_rc_reparse_all;.

J'ai Ubuntu et je ne peux pas compiler pour Gtk2 à cause du manque de bibliothèques

Ubuntu a un problème en ne créant pas tous les liens symboliques dont vous aurez besoin même si les bibliothèques sont installées. Assurez-vous que toutes les bibliothèques manquantes ont leurs liens appropriés quand vous essayer de lier pour Gtk2. Par exemple, vous aurez peut-être besoin de faire:

cd /usr/lib
sudo ln -s libgdk-x11-2.0.so.0 libgtk-x11-2.0.so

Assurez-vous que les liens symboliques [n'importe quoi].so sont créés et pointent vers les bibliothèques en cours.

Comment puis-je compiler un programme pour Gtk2 ?

Pour le moment, l'EDI compilé pour Gtk2 est un peu instable, mais vous pouvez compiler du logiciel pour Gtk2 en utilisant l'EDI Gtk1.

Pour démarrer la recompilation de la LCL pour Gtk2. Allez au menu "Outils" -> "Configurer Création de Lazarus" et choisissez 'Clean all'.

Maintenant cliquez sur Ok et allez vers le menu "Outils" -> "Créer Lazarus avec le profil...".

Maintenant vous pouvez compiler votre logiciel avec Gtk2 en allant sur les options du compilateur et en changeant le widgetset vers Gtk2.

Lazarus s'exécute différemment avec Linux ou Windows. Que dois-je savoir ?

Si vous utilisez Readln(); et Writeln(); pour vos entrée et sortie, la fenêtre de console (parfois appelée fenêtre de terminal) ne va pas surgir comme il le fait avec Windows. Vous aurez besoin d'accéder à cette fenêtre dans Lazarus avec Voir -> Debug Windows -> Sortie Terminal. Contrairement à Windows, vous ne pouvez pas utilisez le retour arrière pour corriger les erreurs que vous avez tapées. La touche Entrée sur le pavé numérique ne marchera pas non plus. Tapez prudemment !

Linux étant sensible à la casse, vous devrez faire attention à la casse dans les noms de fichier.

Windows

Quand je compile le compilateur, j'obtiens: The name specified is not recognized as an internal or external command, operable program or batch file.>& was unexpected at this time.

Dans le répertorie du compilateur, il existe un scripts OS2 nommé make.cmd. NT le voit aussi comme un script, il faut donc le supprimer sur NT, nous n'en avons pas besoin.

Quand je compile le compilateur, j'obtiens: make[3]: ./ppc1.exe: Command not found

Je ne sais pas pourquoi, mais make a en quelque sorte perdu son chemin. Essayez de compiler avec une basedir définie comme: make cycle BASEDIR = your_fpc_source_dir_herecompiler

Quand j'essaie de construire (make) Lazarus, j'obtiens:

make.exe: * * * interfaces: No such file or directory (ENOENT). Stop.make.exe: * * * [interfaces_all] Error 2

Vous devez mettre à niveau votre make.

makefile:27: *** You need the GNU utils package to use this Makefile. Stop.

Assurez-vous que vous n'avez pas installé FPC dans un chemin contenant des espaces. Le MakeFile ne supporte pas cela.

How can I give my program an XP look like lazarus has?

Projet -> Options du projet -> Coche 'Utiliser le fichier manifeste pour autoriser les thèmes'.

Si vous avez un myprogram.exe alors créez un fichier appelé myprogram.exe.manifest and copiez/collez ceci dans la fichier:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity processorArchitecture="*" version="1.0.0.0" type="win32" name="myprogram"/>
<description>programm</description>
<dependency>
  <dependentAssembly>
   <assemblyIdentity
     type="win32"
     name="Microsoft.Windows.Common-Controls"
     version="6.0.0.0"
     publicKeyToken="6595b64144ccf1df"
     language="*"
     processorArchitecture="*" />
  </dependentAssembly>
  </dependency>
</assembly>

Voila! XP apparaît.

Quand j'exécute un programme Windows créé dans Lazarus il démarre dans une fenêtre DOS

Spécifiez l'argument -WG (IHM Windows) dans la ligne de commande du compilateur ou dans l'EDI Lazarus, cochez la case Application Win32 gui dans le dialogue des options du compilateur (Menu Projet -> Options du compilateur -> Config and Target -> target-specific options.

Mac OS X

Pourquoi la compilation d'un projet échoue avec 'unknown section attribute: no_dead_strip'?

Le "décapage" du code mort n'est pas supporté par l'assembleur et le lieur avant Xcode 1.5 (disponible pour Mac OS X 10.3.9). Désactiver les options du compilateur

  • Compilation and linking > Style de l'unité > Lien intelligent (-CX)
  • et Edition de lien > Lier intelligemment (-XX)

Débogage

Voir ici pour les questions sur le débogage sous Mac

Licence

Puis-je développer des applications commerciales avec Lazarus ?

Oui, les composants LCL sont distribués sous la licence LGPL avec une exception, ce qui vous autorise à lier statiquement ces composants sans distribuer le code source de votre application. Les modifications et améliorations des composants LCL doivent être distribués avec le code source. L'EDI Lazarus est lui sous licence GPL. La LCL est restreinte au code dans le répertoire nommé "lcl", un aute code ne pourrait être couvert par cette instruction.

Pourquoi certains composants ne peuvent être utilisés dans une application propriétaire ?

Lazarus est fourni avec des composants additionnels, qui ont été développés par de tierces parties. Ceux-ci peuvent donc être sous une licence différente. Si vous voulez les utiliser, vous devez vérifier la licence dans le code source de ces composants. La plupart des composants tiers se trouvent dans le répertoire "components".

Comment puis-je savoir si un composant fait partie de LCL ?

Tous les composants LCL sont dans le répertoire "lcl". Une liste des composants appartenant à la LCL peut être consultée ici http://lazarus-ccr.sourceforge.net/docs/lcl/ . Si votre code source utilise des composants non listés sur cette page, vous avez peut-être utilisé des composants qui ne font pas partie de la LCL.

Puis-je écrire des plug-ins propriétaires pour Lazarus ?

Oui, la partie IDEIntf de l'EDI est sous licence LGPL avec la même exception, ce qui signifie que les structures de données communes de cette partie ne vous forceront pas à placer votre plug-in ou composant accessible à la conception sous licence GPL. Vous êtes libre de choisir n'importe quelle licence pour votre plug-in; nous ne voulons pas limiter votre choix. C'est ainsi que des plug-ins qui ne sont pas sous une licence compatible GPL sont autorisés. Notez cependant qu'il n'est pas autorisé de distribué une version compilée de Lazarus avec ces plugins non-GPL liés de manière statique; cependant, nous ne voyons pas ceci comme une limitation, puisque compiler Lazarus est facile.

Utiliser le Forum

Quelle est la manière correcte de poser des questions dans le forum ?

La première consigne et la plus importante : toujours mentionner la version de Lazarus, la version de FPC, le jeu graphique (Gtk2...), l'architecture de CPU et le système d'exploitation (version complète) que vous utilisez. Ne pas dire seulement la version la plus récente. Bien préciser le numéro exact de version. Pour les instantanés, le numéro de révision et/ou la date sont aussi importants.

Quand vous posez une question de programmation, toujours essayer de donner quelque code source qui démontre le problème. SVP, entourez votre code avec les balises [code][/code] (ou utilisez le bouton Insert code dans la barre d'outil de l'éditeur de post). Vos pouvez attacher des programmes complets comme des fichiers zip si vous le voulez. Utilisez "Lazarus/Projet/Publier le projet" pour vous aider

Si vous obtenez une erreur dans votre code toujours spécifier quelle est cette erreur. Simplement copier ce que dit le compilateur/débogueur/votre programme serait suffisant dans la plupart des cas. Si l'erreur survient à l'exécution, utilisez -gl et désactivez l'expansion en ligne (inlining) lors de la compilation ainsi votre programme peut générer une trace correcte.

Souvent une image est aussi vraiment utile. Vous pouvez héberger des images dans http://imageshack.us/ et d'autres sites web similaires puis poster un lien.

Essayez de donner à la fois une vue d'ensemble de haut niveau (quel but vous voulez atteindre) et une vue plus détaillée du problème (comment vous tentez d'atteindre votre but). Souvent, il y a des façons de faire plus faciles que vous ne connaissez pas.

Finalement, assurez-vous que vous avez cherché/lu la documentation pertinente (p.ex. le documentation FPC et le wiki Lazarus vois p.ex. Documentation Lazarus). Vous pouvez aussi chercher sur le forum: d'autres personnes ont peut-être trouvé des solutions à des problèmes similaires. Si vous indiquez que vous avez déjà fait une partie du travail par vous-même, les gens seront plus incités à vous aider.

Pour plus de conseils sur la façon la plus maline de poser des questions, lire ceci: http://catb.org/esr/faqs/smart-questions.html

Numérotage de version

Voir la page Version Numbering pour une explication concernant les branches et les numéros de version de Lazarus.

Problèmes/questions avec les anciennes versions de Lazarus/FPC

Les questions concernant les anciennes versions de Lazarus/FPC et les notes sur les mises à niveau sont couvertes ci-dessous.

Souvent la meilleure solution est de mettre à niveau. Lisez les nombreuses Notes de version

Pourquoi l'édition de lien est-elle si lente sur Windows ? [versions anciennes de Lazarus]

Light bulb  Remarque: Ce problème a été résolu dans FPC 2.2 et Lazarus 0.9.24. Veuillez mettre à niveau votre Lazarus si vous le pouvez. Pour les versions plus anciennes, lire le texte ci-dessous.

D'une manière générale, la compilation sur Windows prend plus de temps que sur d'autres plate-formes parce que l'éditeur de liens GNU utilisé par FreePascal est lent sur cette plate-forme. Ce problème affecte seulement Windows et est seulement sensible sur les ordinateurs relativement vieux (moins de 1Ghz) et sur ceux avec peu de RAM (128MB ou moins).

En outre, si vous liez intelligement la LCL, l'édition de lien sera beaucoup plus lente. Une étude à ce sujet est proposée ici : Taille de fichier et lien intelligent

Un éditeur de liens interne a été développé, mais n'a été disponible qu'à partir de la version 2.2 de Free Pascal. Il diminue nettement la durée de l'édition de lien.

L'ancien Lazarus ne supporte pas les ressources de style Windows ; conversion des ressources lrs

Les anciennes versions de FPC (et donc Lazarus) ne supportent pas les ressources Windows (.rc/.res), mais seulement les fichiers LRS (Lazarus Resource files). Voir Lazarus Resources.

Depuis la 0.9.30, Lazarus peut utiliser les ressources FPC. Cela signifie que vous pouvez supprimer les fichiers lrs pour les fiches et remplacer les directives Include {$I unit1.lrs} avec {$R *.lfm}.

Voir aussi

Contributeurs et Commentaires

Cette page a été convertie depuis le epikwiki version.