Lazarus Faq/fr

From Free Pascal wiki
Jump to navigationJump to search

العربية (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.

Qu'est 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.

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

Pourquoi les fichiers binaires produits sont si grands ?

Les fichiers binaires sont grands 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 .

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 .

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 juste "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. Il inclut :

  • 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.

(note: pourquoi faire si ce n'est pas exploité ?)

La taille de l'exécutable 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 petit sur '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

Pourquoi le linkage est il si lent sur Windows?

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 de 1Ghz) et sur ceux avec peu de RAM (128MB ou moins).

En outre, si vous liez intelligement la LCL, le linkage sera beaucoup plus lent. Une étude à ce sujet est localisée ici : Taille de fichier et lien intelligent

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 de liaison.

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.

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

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

Comment je compile lazarus?

Faire quelque chose comme ça:

$ cd lazarus
$ make clean all

Si vous voulez construire Lazarus avec un autre ensemble de widget p. ex. Qt (supporté par Linux, Windows et OSX) alors il faut utiliser l'argument PLATFORM :

$ cd lazarus
$ make clean all LCL_PLATFORM=qt

Comment je construis d'autres projets basé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 voulez construire des applications LCL sans l'IDE 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 et exécuter:

 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.

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 et 1.2.6 nécessitent au moins FPC 2.6.4 (dernières versions à ce jour).

Je ne peux pas compiler Lazarus

  1. Vérifier si le compilateur a la version correcte
  2. Vérifier si les bibliothèques (fpc) sont de la même version .
  3. Vérifier si vous avez un fichier fpc.cfg et pas de vieux fichier ppc386.cfg
  4. Vérifier également les FAQs sur la dépendance par rapport aux Systèmes d'exploitations

Quand j'essaye de compiler un projet , J'ai une erreur

"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.

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

  • 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

à 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 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 :

  • 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.
  • Créer un fichier avec lazres (dans lazarus/tools): lazres yourform.lrs yourform.lfm
  • Ajouter la section suivante d'initialisation à
     initialization
     {$I yourform.lrs}

SVP, gardez à 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.

'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 ceci ne se produit pas . Ainsi vous le besoin d'ajouter LResources à la section Uses de l'unité de la fiche.

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

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

Lazarus est l'IDE et la bibliothèque de composants visuels LCL. Toute autre substance , comme IO, Base de données , FCL et RTL sont fournis par FPC. L'IDE a besoin des chemins vers toutes les sources .

Le chemin des sources de FPC peut être paramétré via: 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?

Par exemple:

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

va créer sound.lrs à partir de sound1.wav et 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;

Comment puis-je voir la sortie de déboggage? (debug output)

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.

Deboggage de Lazarus
Le plus utile pour Windows: Si vous voulez faire une sortie sur console, ajoutez {$APPTYPE console} à lazarus.pp ; Ensuite recompilez Lazarus.

Quelle est la signification des différentes extensions de fichier utilisées par Lazarus?

La section Lazarus Tutorial/fr#Les fichiers de Lazarus explique quelques extensions par un exemple. Voici une liste brève:

*.lpi
fichier Lazarus Project Information; (stocké en XML; contient la configuration spécifique à un projet)
*.lpr
fichier Lazarus Program; contient le source Pascal du programme principal
*.lfm
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 *.pas correspondant)
*.pas or *.pp
Unité avec du code Pascal (typiquement pour une fiche stockée dans le fichier *.lfm correspondant)
*.lrs
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
*.ppu
Unité compilée
*.lpk
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 ?

Créez un patch et envoyez-le aux développeurs. Pour les détails, voir 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?

La Classe TControl possède une propriété Text. Dans une méthode d'une fiche, ce qui a une visibilité supérieure, 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

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.

Linux

Comment puis-je débogguer 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:

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

Soyez prévenu cependant que ddd n'est pas aussi confortable que par exemple le deboggueur 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. 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.

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:

  • 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.
  • 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 la liaison qui fait état de: /usr/bin/ld can't find -l<some lib>

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).
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:
[]# 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.

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+} au 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 suporte pas actuellement chaque propriété de la VCL et le CLX n'est pas complètement compatible avec la VCL.

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 coir 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

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

Vous utilisez probablement un package fpc plus récent que celui utilisé pour construire les bianires 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 ouobtenir 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

Either install the gdk-pixbuf library for gtk1.x or disable the use:

Where to find the gdk-pixbuf library:

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

Debian packages: libgdk-pixbuf-dev

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


How to disable the use in lazarus: In Tools->Configure "Build Lazarus" add the option '-dNoGdkPixBufLib' or at command line: "make clean all OPT=-dNoGdkPixBufLib".

I have SuSE and I get /usr/bin/ld: cannot find -lgtk Error: Error while linking

SuSE installs the gtk devel libs under /opt/gnome/lib (or /opt/gnome/lib64 for 64 bits), which is not in the standard lib path. Simply add it to your /etc/fpc.cfg. (-Fl/opt/gnome/lib).

Lazarus crashes with runtime error 211 after I installed a component

After I installed a component, Lazarus crashes with the following message:

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

How can I fix this?

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:

1) Change the source of ide/lazarus.pp: add the cthreads as first unit to the uses clause, so that is looks like this:

uses
  //cmem,
  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.

Hint: Maybe your old (non-crashing) lazarus executable is stored as lazarus.old in the same directory as the crashing lazarus executable.

When I run a program with threads I get runtime error 232

The complete error message is:

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: Add cthreads as first unit to the uses clause of your main program, usually the .lpr-file.

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:

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

class "GtkWidget" style "default-text"

How can my gtk programs use custom rc files?

Option a) Name the rc file yourprogram.gtkrc and put it in the same directory where the executable is.

Option b) Use unit GtkInt and call GTKWidgetSet.SetRCFilename('your_preferred_rc_file'); Best done before Application.Initialize in the .lpr file with {$IFDEF LCLGtk}.

I have Ubuntu and I cannot compile for Gtk2 due to missing libraries

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:

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

Make sure that the [whatever].so symbolic links are created and point to the actual libraries.

How can I compile a program for Gtk2?

At the moment, the Gtk2 compiled IDE is a little unstable, but you can compile software for Gtk2 using the Gtk1 IDE.

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.

Now click Ok and go to the menu "Tools"->"Build Lazarus"

Now you can compile your software with Gtk2 going on the Compiler options and changing the widgetset to Gtk2.

I get this message: "[WARNING] ** Multibyte character encodings (like UTF8) are not supported at the moment."

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)
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:

export LC_CTYPE="pt_BR"
export LANG="pt_BR"
export LANGUAGE="pt_BR"
./lazarus

Substitute pt_BR with the locale for your country. You can create a script to automate this.

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.

In the compiler dir exists an OS2 scriptfile named make.cmd. NT sees this also 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

I don't know why but somehow make has lost its path. Try to cycle with a basedir set like: make cycle BASEDIR=your_fpc_source_dir_herecompiler

When I try to make Lazarus I get:

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

You need to upgrade your make.

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.


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"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity processorArchitecture="*" version="1.0.0.0" type="win32" name="myprogram"/>
<description>programom</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 looks.

When I run Windows program created in Lazarus it starts with a DOS window

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.

Licence

Puis-je développer des applications propriétaires 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.

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. 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.

Contributors and Comments

This page has been converted from the epikwiki version.