Lazarus Faq/de

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)

Allgemein

Warum sind die generierten Binaries so groß?

Die Binaries sind groß, weil sie eine Menge Debug-Informationen enthalten, die für die Verwendung von gdb (GNU Debugger) notwendig sind.

Der Compiler bietet eine Option, die Debug-Informationen aus dem Executable zu entfernen (-Xs), aber wegen eines Bugs im Compiler (Version 2.0.2 und früher), funktioniert es nicht korrekt. In Version 2.0.4 und in der Entwicklerversion des Compilers wurde dies bereinigt. Prüfen sie bei den Compilereinstellungen auch, ob 'Zeilennummern in Laufzeit-Backtraces anzeigen' und 'Smart Linken' aktiviert sind und ändern sie ggf. die Einstellungen.

Sie können ein Programm genannt "strip" verwenden, um die Debug-Symbole aus dem Executable zu entfernen. In Windows befindet es sich im Lazarusverzeichnis "lazarus\fpc\fpcversion\bin\i386-win32\." unter Linux lässt es sich direkt von der Kommandozeile aus starten.

Tippen Sie einfach "strip --strip-all <ihr Executable mit Pfad>" auf der Kommandozeile.

Wenn Sie Ihr Programm noch kleiner machen wollen, sollten Sie auch UPX ([1]) versuchen. UPX ist ein sehr gutes Programm zur Komprimierung ausführbarer (Binär-)Dateien. UPX beansprucht nur wenig zusätzlichen Speicher während der Dekompression, die außerordentlich schnell von statten geht (~10 MB/sec auf einem Pentium 133). Man braucht also nicht zu befürchten, durch die Verwendung von UPX erwähnenswerte Nachteile zu haben.

Um UPX zu verwenden, tippen Sie einfach "upx <ihre ausführbare Datei mit Pfad>" in die Kommandozeile.

Nach der Verwendung von strip und UPX erreicht ein einfaches GUI Lazarus Programm:

  • ~ 700kb unter Linux
  • ~ 420kb unter Windows

Eine detailliertere Antwort wird auf Size Matters gegeben.

Hinsichtlich der Größe der Lazarus-Anwendungen ist es außerdem wichtig anzumerken, dass selbst ein simples "Hello World"-Programm bereits eine Vielzahl an Fähigkeiten beinhaltet. Im Einzelnen:

  • Eine Bibliothek zur Handhabe von XML
  • Bibliotheken, um mit Bildformaten wie png, xpm, bmp und ico umzugehen
  • Die ganze Bandbreite der Lazarus Komponenten-Bibliothek (LCL)
  • Die komplette Free Pascal Laufzeitumgebung (RTL)

Man muss bei der Größe der ausführbaren Datei also berücksichtigen, dass ein einfaches Lazarus-Programm alle Fähigkeiten "beinhaltet", die von einem komplexen und nichttrivialen Programm in Anspruch genommen werden können.

Mit wachsender Komplexität wächst die Größe der Lazarus-Anwendungen sehr langsam. Verglichen mit anderen Compilern und/oder Programmiersprachen erscheinen somit kleinere Programme (etwa Hello-World-Programme) als lazaruscompilierte Anwendungen größer - bei Programmen zunehmender Komplexität jedoch meist kleiner. Dieser Umstand begründet sich in der Art und Weise, wie der FreePascal-Compiler den Quelltext in Maschinensprache übersetzt. Das folgende Schaubild soll den Umstand veranschaulichen:

Lazarus vs cpp.png

Warum ist das Linken unter Windows so langsam?

Im Allgemeinen benötigt die Kompilierung unter Windows mehr Zeit als auf anderen Plattformen, weil der von Free Pascal genutzte GNU Linker auf dieser Plattform langsam ist.

Seitdem Lazarus Smartlinking unterstützt, sind die kompilierten Anwendungen (nach "strip" und "upx", siehe unten) etwa 30% kleiner als zuvor. Das bringt den Nachteil mit sich, dass der Vorgang des Linken dadurch sehr viel komplizierter geworden ist - was einige Probleme mit dem GNU Linker mit sich brachte und den Link-Vorgang verlangsamte. Weitere Informationen zu diesem Thema finden Sie hier:File size and smartlinking

Dieses Problem betrifft jedoch nur Windows, und tritt vor allem auf relativ alten Computern (weniger als 1Ghz) und Computern mit wenig RAM (128MB oder weniger) in Erscheinung.

Ein interner Linker wurde entwickelt. Er wird aber erst mit Free Pascal 2.2 verfügbar sein (natürlich ist er in SVN verfügbar). Er verringert die Zeit für das Linken dramatisch.

Aber was kann man bis dahin machen, um den Linkvorgang zu beschleunigen? - Sie haben zwei Möglichkeiten:

  1. Schalten sie smartlinking unter "Projekt -> Compilereinstellungen... -> Linken ->Linker-Stil" aus. Unglücklicherweise reicht diese Einstellung alleine nicht aus. Sie müssen zusätzlich den Befehl "-XS" unter "Projekt -> Compilereinstellungen... -> Linken -> Einstellungen" hinzufügen.
  2. Alternativ können Sie Ihre LCL neu kompilieren. Öffnen Sie dazu Lazarus. Gehen sie zum Menü "Werkzeuge" -> "Lazarus Einstellungen einrichten". Setzen Sie hier die Zeile "LCL erstellen" auf "clean+build", und alle anderen Zeilen auf "none"; klicken Sie anschließend auf OK. Gehen sie jetzt zu "Werkzeuge" -> "Lazarus erstellen".

Nach diesen Einstellungen ist das Smartlinking deaktiviert. Vorteil: Das Linken erfolgt schneller; Nachteil: Die ausführbaren Dateien werden größer.

Brauche ich ppc386.cfg oder fpc.cfg?

Sie brauchen nur fpc.cfg. Auf diese Weise kann der Compiler die Bibliotheken finden.

Wie kompiliere ich Lazarus?

Sie können Lazarus kompilieren, indem Sie von Ihrer Konsole aus zunächst in das Verzeichnis von Lazarus wechseln, beispielsweise:

$ cd lazarus

Und anschließend den folgenden Befehl eingeben:

$ make clean all

Wie erzeuge ich andere Projekte basierend auf der LCL?

Wenn sie aus irgendwelchen Gründen die IDE nicht benutzen können oder wollen, um ihre Applikationen zu bauen, benutzen sie stattdessen lazbuild. Das ist eine Kommandozeilenversion der IDE zum Bau von Lazarus - Projekten und -Packages. Wenn sie LCL-Applikationen bauen möchten, ohne die IDE oder lazbuild zu verwenden, fügen sie bitte die folgenden Zeilen am Ende ihrer fpc.cfg ein:


  # searchpath for other toolkits (Linux)
  -Fu/usr/lib/fpc/$fpcversion/units/$fpctarget/{YourToolKit}
  # searchpath for other toolkits (Windows)
 -Fu/{YourLazarusDirectory}/components/units/{YourToolKit}
Wobei {YourToolKit} gtk2, gnome, qt oder win32 sein kann. Danach führen sie bitte folgendes aus:
ppc386 your.project.pp

Hinweis: Vergessen sie nicht, die Entwicklungs Packages für ihr Toolkit zu installieren. Andernfalls können sie eine Meldung wie: Linker message: cannot find -l erhalten.

Welche Version von FPC wird benötigt?

2.2.2 auf allen unterstützten Systemen

Ich kann Lazarus nicht kompilieren.

  1. Prüfen Sie, ob der Compiler die richtige Version hat.
  2. Prüfen Sie, ob die (fpc) Bibliotheken (libraries) dieselbe Version haben.
  3. Prüfen Sie, ob Sie die fpc.cfg haben und nicht die alte ppc386.cfg.
  4. Prüfen Sie auch die für ihr Betriebssystem spezifischen FAQs.
  5. Prüfen Sie, wenn sie das Projekt schonmal kompiliert haben ob die kompilierte Version nicht schon läuft.
  6. Speichern Sie das Projekt. (War bei meinem Laptop unter W. XP nötig(v.0.9.27))

Wenn ich versuche, ein Projekt zu kompilieren, bekomme ich eine Fehlermeldung:

"Cannot find Unit interfaces" (Kann Unit interfaces nicht finden). Wie kann ich das Problem lösen?

Dies bedeutet, dass der Compiler die Datei 'interfaces.ppu' nicht finden kann oder er eine findet, die falsch oder veraltet ist.

Die Unit findet man in {LazarusDir}\lcl\units\{TargetCPU}-{TargetOS}\{LCLWidgetSet}\interfaces.ppu. Zum Beispiel: /home/Benutzername/lazarus/lcl/units/i386-linux/gtk/interfaces.ppu.

Stellen sie sicher, dass sie nur dort ist. Wenn sie mehrere Versionen von interfaces.ppu haben, dann haben sie wahrscheinlich eine verkehrte Konfiguration (zum Beispiel, wenn sie ein LCL-Verzeichnis zum Suchpfad hinzugefügt haben). Entfernen sie alle interfaces.ppu, bis auf die eine im obigen Verzeichnis.

Wenn sie ein anderes Widgetset ausgewählt haben, dann müssen sie die LCL für dieses Widgetset erzeugen, um Lazarus zu erzeugen.

Wenn es dort ist, sie aber diese Fehlermeldung erhalten, dann benutzen sie einen anderen Compiler / RTL für die Kompilierung ihres Projekts als sie für die Kompilierung ihrer Lazarus IDE benutzt haben. Sie können eine der folgenden Maßnahmen ergreifen:

  • Bauen sie die LCL neu auf (oder Lazarus komplett) mit dem Compiler, der in den Umgebungsoptionen selektiert ist. Sie können dies tun mit Werkzeuge -> Lazarus erstellen. Bevor sie dies tun, prüfen sie die gegenwärtigen Einstellungen in Werkzeuge -> Configure "Build Lazarus".
  • Ändern sie den Compiler in den Umgebungsoptionen auf denjenigen, den sie zum Kompilieren von Lazarus benutzt haben. Schauen sie auch sorgfältig in den Umgebungsoptionen nach, ob sie die richtigen Pfade für das Lazarus-Verzeichnis und das FPC-Quellverzeichnis benutzen. Prüfen sie, dass es nur eine Version der Compiler-Konfigurationsdatei fpc.cfg gibt - sie sollte sich für Linux/Unix Systeme in /etc/ befinden und für Windows Systeme im selben Verzeichnis wie der FPC Compiler. Rogue-Kopien schleichen sich oft ein, wenn sie ihren Compiler auf ein neuere Version upgedated haben; Sie befinden sich in ihrem home Verzeichnis oder im selben Verzeichnis , in dem sie ihren neuen Compiler erstellt haben. Löschen sie diese!!

Wenn ich versuche, Delphi-Projekte unter Lazarus zu kompilieren, erhalte ich eine Fehlermeldung auf der Zeile :{$R *.DFM} Wie kann ich das Problem lösen ?

Lazarus (oder besser Linux) weiß nichts über Ressourcen, daher können sie diese nicht auf die selbe Weise nutzen wie Delphi/Win32 es tut. Allerdings nutzt Lazarus eine Methode, die ziemlich kompatibel mit dieser ist. Mit folgenden Schritten können Sie ihre Delphi Layouts (.dfm Dateien) weiter benutzen:

  • Sie benötigen eine Textversion der .dfm Dateien. Delphi 5 und höher tun dies per Voreinstellung. Wenn sie ältere Dateien haben: ALT-F12, um das Layout als Text zu sehen und kopieren/einfügen. Wenn sie eine .dfm Datei in Textform haben, einfach in eine .lfm Datei kopieren.
  • Erzeugen sie eine Datei mit lazres (in lazarus/tools): lazres yourform.lrs yourform.lfm
  • Fügen sie den folgenden "initialization"-Abschnitt hinzu
initialization
  {$I yourform.lrs}

Beachten sie, dass nicht alle Eigenschaften in der dfm Datei von Lazarus unterstützt werden (bis jetzt), daher könnten sie einen Absturz erhalten.

'Identifier not found LazarusResources'.

Wenn ein Formular erzeugt wird, dann fügt Lazarus automatisch einige zusätzliche Units zu dem uses-Abschnitt ihrer Formular-Unit hinzu. Während der Konvertierung einer Delphi-Unit zu einer Lazarus-Unit passiert dies nicht. Daher müssen sie LResources zu dem uses-Abschnitt ihrer Formular-Unit (manuell) hinzufügen.

Wenn Ereignisse von Objekten angesteuert werden z.B. das OnClick-Ereignis einer Schaltfläche, erhalte ich die folgende Fehlermeldung: ERROR unit not found: stdCtrls

Stellen sie unter Projekt -> Projektinspektor sicher, dass ihr Projekt auf dem Package 'LCL' beruht und dass sie die FPC-Quellen installiert haben.

Lazarus ist die IDE und die visuelle Komponenten-Bibliothek LCL. Alle anderen Dinge, wie IO, Datenbanken, FCL und RTL werden von FPC zur Verfügung gestellt. Die IDE benötigt die Pfade zu allen Quellen.

Der FPC-Quellenpfad kann gesetzt werden mittels: Einstellungen -> Umgebungseinstellungen -> Dateien -> FPC-Quelltextverzeichnis

Wie kann man eine kleine Datei in das ausführbare Programm einbetten, ohne eine separate Datei zu benötigen? Wie kann man eine Ressource einbetten?

Zum Beispiel:

/ihr/Lazarus/Pfad/tools/lazres sound.lrs sound1.wav sound2.wav ...

wird sound.lrs aus sound1.wav und sound2.wav erzeugen.

Dann fügen sie es hinter der Formular lrs Datei ein:

 ...
 initialization
 {$i unit1.lrs} // this is main resource file (zuerst)
 {$i sound.lrs} // user defined resource file
 
 end.

In ihrem Programm können sie dann verwenden:

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

Wie kann ich die Debug-Ausgabe sehen?

Die LCL stellt in der Unit LCLproc Prozeduren bereit, um Debug-Ausgaben zu machen:

  • DebugLn: arbeitet genau wie WriteLn, akzeptiert aber nur strings.
  • DbgOut: arbeitet genau wie Write, akzeptiert aber nur strings.

Unter normalen Umständen wird die Ausgabe auf stdout ausgegeben. Wenn stdout geschlossen ist, (z. B., wenn die Anwendung {$AppType Gui} ist oder unter Windows mit -WG kompiliert wurde), wird nichts ausgegeben.

Die Debug-Ausgaben können auch in eine Datei geschrieben werden. Die LCLProc Unit prüft in ihrer "initialization"-Sektion ob der Kommandozeilenparameter '--debug-log=<file>' mit übergeben wurde. Ist dies der Fall, wird die debug Ausgabe in <file> geschrieben.

Wenn der Parameter nicht übergeben wurde (--debug-log), wird nach einer Umgebungsvariable gesucht, die xxx_debuglog heißt. xxx steht hierbei für den Exe-Namen ohne Erweiterung. Für Lazarus wäre dies lazarus_debuglog. Wenn eine solche Umgebungsvariable existiert, wird ebenfalls eine Datei geschrieben. Der Dateiname ist der Inhalt der Umgebungsvariablen. Beispiel: Wenn Sie folgendes tun:

set lazarus_debuglog=c:\lazarus\debug.txt

Wird die Debug-Ausgabe nach c:\lazarus\debug.txt geschrieben.

Jede Applikation, die LCLProc benutzt, kann diese Funktionalität benutzen.

Lazarus Debuggen
Äußerst nützlich für Windows: Wenn Sie die Ausgabe auf einer Konsole sehen möchten, fügen sie {$APPTYPE console} zu lazarus.pp hinzu. Dann erstellen sie Lazarus neu.

Welche Bedeutung haben die verschiedenen von Lazarus verwendeten Dateierweiterungen?

Das Lazarus Tutorial erläutert einige Erweiterungen anhand eines Beispiels. Hier ist eine kurze Auflistung:

*.lpi
Lazarus Project Information Datei (XML Format; enthält projekt-spezifische Einstellungen wie Compilereinstellungen und benötigte Packages)
*.lps
Lazarus Program Session file; stored in XML; contains personal data like cursor positions, source editor files, personal build modes
*.lpr
Lazarus Programm Datei; enthält den Pascal-Quelltext des Hauptprogramms
*.lfm
Lazarus Formular Datei; enthält Konfigurationsinformationen für alle Objekte auf einem Formular (gespeichert in einem Lazarus-spezifischen Format; Die Aktionen werden durch Pascal-Quelltext in einer entsprechenden *.pas Datei beschrieben)
*.pas oder *.pp oder *.p
Unit mit Pascal-Code (typischerweise für eine Form, gespeichert in einer entsprechenden *.lfm Datei)
*.lrs
Lazarus-Ressourcen-Datei (dies ist eine erzeugte Datei; nicht zu verwechseln mit einer Windows-Ressourcen-Datei).
Diese Datei kann erzeugt werden mit dem lazres-Werkzeug (im Verzeichnis Lazarus/Tools) und folgender Kommandozeile: lazres myfile.lrs myfile.lfm
*.ppu
Kompilierte Unit, vom FreePascal Compiler für jede Unit und Programm erzeugt.
*.o
Objekt-Datei, erzeugt vom Compiler, für jede ppu Datei gibt es eine korrespondierende o Datei, vom Linker benötigt.
*.lpk
Lazarus package information Datei. (XML Format; enthält Package-spezifische Einstellungen wie Compilereinstellungen und benötigte Packages)
*.lrt
Lazarus Resourcestring table file. created when saving a lfm file and i18n is enabled. It contains the TTranslateString properties of the lfm. Do not edit them, they are overwritten.
*.rst
Resourcestring table file. created by the compiler for every unit with a resourcestring section. Do not edit them, they are overwritten.
*.po
gnu gettext messages file. When i18n is enabled the IDE creates/updated the .po files with the resourcestrings from the rst and lrt files.

Ich habe Lazarus repariert/erweitert. Wie kann ich meine Änderungen zu den offiziellen Lazarus Quellen hinzufügen?

Erzeugen sie einen Patch und senden sie ihn an die Entwickler. Für Details siehe Creating A Patch.

Bei dem Versuch, eine Textdatei über var mytext: text; zu deklarieren, kommt der Fehler "Unit1.pas(32,15) Error: Error in type definition". Wie kann ich vorgehen?

Der Grund für die Fehlermeldung ist: Zum Typ Text gibt es eine gleichnamige Eigenschaft der Klasse TControl: Die TControl Klasse hat eine Text Eigenschaft. Zum Umgang mit Textdateien hingegen wird der Typ Text der Unit System benötigt. Aus Gründen der Unterscheidbarkeit müssen Sie daher für den Umgang mit Textdateien den Typ TextFile verwenden. Es handelt sich dabei um ein Pseudonym des Types Text der Unit System. Beispiel:

var
  MyTextFile: TextFile;

Alternativ kann man die zum Typ Text gehörende Unit in die Definition mit aufnehmen:

var
  MyTextFile: System.Text;

Ähnliche Probleme tauchen beim Umgang mit Textdateien in Verbindung mit den Befehlen "assign" und "close" auf. TForm hat eine assign und eine Close Methode. Für den Umgang mit Textdateien müssen Sie daher die Pseudonyme AssignFile und CloseFile verwenden oder alternativ dazu den Unitnamen System hinzufügen.

Ich erhalte eine Fehlermeldung bei der Verwendung von Printer.BeginDoc

Die Unit Printers muss zum Abschnitt uses hinzugefügt werden.

Das Package Printer4Lazarus muss zu den Projektvoraussetzungen in der IDE hinzugefügt werden: Projekt -> Projektinspektor -> Hinzufügen -> Neue Anforderung -> Package-Name:

Falls das Package Printer4Lazarus nicht in der Liste in der Dropdown-Box auftaucht, muss es erst installiert werden. Das Package ist Teil der Lazarus-Installation und befindet sich in

[Lazarus Installationsverzeichnis]\components\printers

Wenn sie die Vorgabeinstallationsverzeichnisse verwendet haben, ist das Lazarus Installationsverzeichnis unter:

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

Wie kann ich ein Lazarus-Entwickler werden und Zugang zu SVN und dem Bug-tracker erhalten?

Voraussetzung: Sie müssen Lazarus erlernen und ihre Kenntnisse und Fähigkeiten beweisen. Fangen sie an, die Wiki Artikel zu lesen, den Lazarus Quellcode, schauen sie im Lazarus Bug-Tracker nach, beseitigen sie einige Bugs und wenn sie denken, dass sie soweit sind, kontaktieren sie die Entwickler auf der Mailing Liste.

Wo ist ... definiert?

Virtual key constants

Virtual key constants sind definiert in LCLType. Fügen sie LCLtype zu ihrem uses-Abschnitt hinzu.

Nutzung der IDE

Wie kann ich die "Automatische Vervollständigung (identifier completion)" nutzen?

Sie können die "identifier completion" aufrufen, indem Sie die Tasten Ctrl+Space drücken. Unter dem Menüpunkt "Einstellungen --> Editoreinstellungen --> Editor --> Vervollständigung/Hinweise" kann man einstellen, wie schnell dies automatisch passieren soll.

Lazarus-IDE mit andockbaren Fenster

Eine IDE mit angedockten Fenstern kann mit Hilfe von "AnchorDocking" erzeugt werden, das seit langer Zeit mit Lazarus ausgeliefert, aber standardmäßig nicht installiert wird. Für die Installation sind folgende Schritte nötig:

  • "Package --> Installierte Package einrichten... --> Verfügbar für Installation" - anchordockingdsgn x.x wählen.
  • Auswahl installieren
  • Speichern und IDE rekompilieren
  • Fortsetzen
  • IDE wird nun kompiliert
  • Nach dem Neustart: "Werkzeuge --> Einstellungen... --> Umgebung --> Docking / Anchordocking" - Docking den Bedürfnissen anpassen. Ok
+-------------------++--+
|Menü               ||  |
+-------------------+|  |
+--++---------------+|  |
|PI|| Quelltext-    ||CE|
+--+| editor        ||  |
+--+|               ||  |
|  |+---------------++--+
|OI|+-------------------+
|  ||Nachrichten        |
+--++-------------------+

Linux

Wie kann ich unter Linux ohne die IDE debuggen?

Zuerst benötigen sie einen Debugger. gdb ist der Standard-Debugger unter Linux und verschiedene GUI-frontends sind verfügbar. Ein gebräuchliches Frontend ist ddd, das Bestandteil der meisten gebräuchlichen Distributionen ist. Um Lazarus/lcl mit Debug-Informationen zu kompilieren, sollten sie die folgenden Kommandos benutzen, um eine Debug-Sitzung zu starten:

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

Seien sie jedoch gewarnt, dass ddd nicht so komfortabel wie zB. der Lazarus-Debugger ist. Besonders, wenn es darum geht, sich die Inhalte von Variablen anzuschauen, müssen sie berücksichtigen, dass ddd/gdb case-sensitive sind, während Pascal case-insensitive ist. Deshalb müssen sie alle Variablennamen in Großbuchstaben schreiben, um ihre Inhalte zu sehen. Für mehr Informationen schauen sie in die FPC-Handbücher.

Ich kann jetzt debuggen, aber ddd findet meine Quellen nicht oder reklamiert, dass sie keinen Code enthalten. Was ist das?

Dies ist ein Pfad-bezogenes Problem entweder mit gdb oder ddd. Sie können dies vermeiden durch

  • Benutzen des "Change directory" Kommandos aus dem ddd-Menü und Wahl des Verzeichnisses, wo sich die Quellen befinden. Das Manko dieser Methode ist, dass sie jetzt die Quelle des Programms, mit dem sie starteten (z.B. Lazarus) nicht benutzen können. Daher mag es notwendig sein, das Verzeichnis mehrmals zu ändern.
  • In ddd gehen sie zu [Edit] [gdb-settings] und setzen den Suchpfad
  • Erstellen einer $(HOME)/.gdbinit Datei wie:
     directory /your/path/to/lazarus
     directory /your/path/to/lazarus/lcl
     directory /your/path/to/lazarus/lcl/include

Ich erhalte einen Fehler während des Linken der besagt, dass /usr/bin/ld nicht -l<some lib> finden kann

Package basierte Distributionen
Sie müssen das Package installieren, das die lib<somelib>.so oder lib<somelib>.a Dateien bereitstellt. Dynamische Bibliotheken unter Linux haben die Erweiterung .so, während statische Bibliotheken die Erweiterung .a haben. On some Linux distro's you have installed the package (rpm, deb) <packagename> which provides <some lib>, but you also need the development package (rpm, deb), normally called <packagename>-dev, die die .a (static lib) und/oder die .so (dynamic lib) enthalten.
Source Based Distributionen und manuelle Kompilierung (LFS)
Stellen sie sicher, dass es eine lib<somelib>.a im Pfad gibt, und dass sie die richtige Version enthält. Damit der Linker die dynamische Bibliothek finden kann, erstellen sie ein symlink mit Namen lib<some lib>.so to lib<some lib><version>-x,y.so if necessary (and/or for static lib; lib<some lib>.a to lib<some lib><version>-x,y.a).
FreeBSD
Wie bei sourcebasierten Distributionen. Stellen sie außerdem sicher, dass sie -Fl/usr/local/lib in ihrer fpc.cfg und/oder ihrem Lazarus Bibliothekspfad haben. Bitte beachten sie, dass GTK1.2 unter FreeBSD den Paketnamen gtk12 hat (Genauso wie glib)
NetBSD
Wie bei sourcebasierten Distributionen. Stellen sie außerdem sicher, dass sie -Fl/usr/pkg/lib in ihrer fpc.cfg und/oder ihrem Lazarus Bibliothekspfad haben.

Wie kann ich ein Kylix 2 Projekt in ein Lazarus Projekt konvertieren?

Beinahe auf die selbe Weise wie man ein Kylix Projekt in ein Delphi/VCL Projekt konvertiert.

Die LCL (Lazarus Component Library) versucht kompatibel zu Delphis VCL zu sein. Kylix CLX versucht kompatibel zu QT sein. Hier sind einige allgemeine Hinweise:

  • Benennen sie alle benutzten CLX Q-Units wie QForms, QControls, QGraphics, ... in ihre VCL Entsprechungen: Forms, Controls, Graphics, ... um.
  • Fügen sie LResources zum uses-Abschnitt jeder Formularquelle hinzu.
  • Benennen sie alle .xfm Dateien in .lfm Dateien um oder kopieren sie sie.
  • Benennen sie die .dpr Dateien in .lpr Dateien um oder kopieren sie sie.
  • Entfernen sie die {$R *.res} Direktive.
  • Entfernen sie die {$R *.xfm} Direktive.
  • Fügen sie die {$mode objfpc}{$H+} oder {$mode delphi}{$H+} Direktive zu den .pas und .lpr Dateien hinzu.
  • Fügen sie einen initialization-Abschnitt am Ende jeder Formularquelle hinzu und auch eine include Direktive für die .lrs Datei (lazarus resource file):
initialization
  {$I unit1.lrs}
Die .lrs Dateien können erzeugt werden mit dem lazres Tool in: (lazarusdir)/tools/lazres.
Zum Beispiel: ./lazres unit1.lrs unit1.lfm
  • Fix the differences. Die LCL unterstützt noch nicht jede Eigenschaft der VCL und die CLX ist nicht völlig VCL kompatibel.
  • To make it more platform independant, reduce unit libc (which is deprecated) references and substitute with native FPC units like baseunix/unix as much as possible. This will be necessary to support other targets than linux/x86 (including macOS, FreeBSD and Linux/x86_64)

Während der Kompilierung von Lazarus kann der Compiler eine Unit nicht finden. (z.B. gtkint.pp(17,16) Fatal: Can't find unit GLIB)

1. Testen sie einen sauberen Neuaufbau: benutzen sie 'make clean all'

2. Prüfen sie, ob der Compiler die richtige Version hat (z.B. 2.0.4)

3. Prüfen sie, ob der Compiler die richtige Konfigurationsdatei benutzt. Die normale Installation erstellt /etc/fpc.cfg. Aber FPC sucht auch nach ~/.ppc386.cfg, ~/.fpc.cfg, /etc/ppc386.cfg und es benutzt nur die erste gefundene Datei.

Hinweis: Sie können mit 'ppc386 -vt bogus' sehen, welche Konfigurationsdatei verwendet wird.

4. Prüfen sie, ob die Konfigurationsdatei (/etc/fpc.cfg) die richtigen Pfade zu ihren FPC Bibliotheken enthält. Dort müssen drei Zeilen etwa so sein:

   -Fu/usr/lib/fpc/$version/units/$target
   -Fu/usr/lib/fpc/$version/units/$target/*
   -Fu/usr/lib/fpc/$version/units/$target/rtl
Der erste Teil dieser Pfade (/usr/lib/fpc) hängt von ihrem System ab. Bei einigen Systemen kann dies zum Beispiel /usr/local/lib/fpc/... sein.
Hinweis: Sie können ihre Suchpfade mit 'ppc386 -vt bogus' sehen.

5. Prüfen sie, dass die Konfigurationsdatei (/etc/fpc.cfg) keine Suchpfade zu den den LCL Quelldateien (.pp, .pas) enthält:

 verboten: -Fu(lazarus_source_directory)/lcl
 verboten: -Fu(lazarus_source_directory)/lcl/interfaces/gtk
Wenn sie die LCL für alle ihre FPC Projekte hinzufügen wollen, stellen sie sicher, dass die zwei Pfade wie die folgenden aussehen und nach den obigen FPC - Bibliotheken Pfaden platziert werden:
 -Fu(lazarus_source_directory)/lcl/units
 -Fu(lazarus_source_directory)/lcl/units/gtk

6. Prüfen sie, ob die vermisste Unit (glib.ppu) in ihrem FPC-Bibliotheken-Verzeichnis existiert. Zum Beispiel die gtk.ppu ist unter /usr/lib/fpc/$fpcversion/units/linux/gtk/ zu finden. Wenn sie nicht existiert, ist die FPC Bibliothek beschädigt und sollte neu installiert werden.

7. Prüfen sie, ob die Quellen sich in einem NFS gemountetem Verzeichnis befinden. In einigen Fällen updated das NFS erstellte Dateien nicht korrekt. Bitte versuchen sie, die Dateien in ein nicht NFS Verzeichnis zu verschieben und kompilieren dort.

8. Sollte dies immer noch nicht zum Erfolg führen, versuchen sie das samplecfg-Skript auszuführen:

# cd /usr/lib/fpc/version/

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

Anmerkung! Fügen sie kein - / - nach 'etc' ein, denn wenn sie es tun, wird das System eine Datei - /etc/fpc.cfg/fpc.cfg erzeugen. Wir wollen, dass samplecfg eine Datei erzeugt - /etc/fpc.cfg - und nicht das Verzeichnis /etc/fpc.cfg.

Ich habe die binäre Version installiert, aber wenn ein einfaches Projekt kompiliert wird, meldet Lazarus: Fatal: Can't find unit CONTROLS

Wahrscheinlich nutzen sie ein neueres FPC Package als bei der Erstellung der Lazarus Binärdateien. Die beste Lösung ist der Download der Quellen und die manuelle Kompilierung von Lazarus. Sie können den Quellen Snapshot downloaden oder die Quellen über CVS erhalten (Anmerkung: das Lazarus Projekt ist inzwischen von CVS auf SVN umgestiegen):

  $ bash
  $ export CVSROOT=:pserver:cvs@cvs.freepascal.org:/FPC/CVS
  $ cvs login
  # Hint: The password is '''''cvs''''' (lowercase).
  # Hint 2 : Of course, "cvs" is not the correct password, what did you expect ?
  # see [[Getting_Lazarus#Using_the_command_line]]
  $ cvs -z3 checkout lazarus
  $ cd lazarus
  $ make

Stellen sie sicher, dass Lazarus das neue Quellenverzeichnis erhält: Werkzeuge -> Einstellungen -> Umgebung -> Dateien

Lazarus kompiliert, aber das Linken schlägt fehl mit: libgdk-pixbuf not found

Entweder installieren sie die gdk-pixbuf Bibliothek für GTK1.x oder unterdrücken die Verwendung.

Wo ist die gdk-pixbuf Bibliothek zu finden:

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

Debian Packages: libgdk-pixbuf-dev

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

Wie unterdrückt man die Verwendung in Lazarus: In Werkzeuge->Configure "Build Lazarus" fügen sie die Option '-dNoGdkPixBufLib' hinzu oder auf der Kommandozeile: "make clean all OPT=-dNoGdkPixBufLib".

Ich habe SuSE und ich erhalte /usr/bin/ld: cannot find -lgtk Error: Error while linking

SuSE installiert die GTK Entwickler Bibliotheken unter /opt/gnome/lib, das nicht im Standard Bibliothekenpfad ist. Fügen sie es einfach zu ihrer /etc/fpc.cfg hinzu. (-Fl/opt/gnome/lib).

Lazarus stürzt mit Laufzeitfehler 211 ab, nachdem ich eine Komponente installiert habe

Nachdem ich eine Komponente installiert habe, stürzt Lazarus mit folgender Meldung ab:

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

WIe kann der Fehler behoben werden?

Ihre frisch installierte Komponente benutzt Threads. Der FPC auf einem *nix sorgt nicht automatisch dafür, das Threads unterstützt werden, dieses muss manuell festgelegt werden. Die nötige Initialisierung geschieht mit der cthreads unit. Jedes Programm, das Ihre neue Komponente einsetzt, benötigt im Hauptprogramm die cthread unit in der uses Klausel. Auch Lazarus selbst macht dabei keine Ausnahme.

Es gibt 2 Wege, wie man Threading unter *nix aktiviert:

1) Open the package. In the package editor click on Options. Under page Usage add to the custom options -dUseCThreads. Then rebuild the IDE. This way the cthreads unit will be automatically used by the IDE under unix and the cthreads are initialized.

2) In order to avoid modifying package, a fpc compiler option could be used directly. 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.

Siehe auch Multithreaded_Application_Tutorial#Units_needed_for_a_multithreaded_application

Wenn ich ein Programm mit Threads starte erhalte ich den Laufzeitfehler 232

Die vollständige Fehlermeldung lautet:

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

Lösung: Die für Unix/Linux benötigte Unit, cthreads, wird von der IDE standardmäßig im uses-Abschnitt des Hauptprogramms (üblicherweise die .lpr-Datei) hinzugefügt, ist allerdings durch das Symbol UseCThreads deaktiviert, weil die meisten Programme keine Threads verwenden. Definieren Sie {$DEFINE UseCThreads} damit die Unit eingebunden wird, oder entfernen Sie das {$IFDEF UseCThreads} (das $IFDEF UNIX wird immer benötigt, um die Einbindung der Unit bei Nicht-Unix/Linux-System zu unterbinden).

Project1.lpr könnte dann in etwa so aussehen:

program project1;

{$mode objfpc}{$H+}
{$define UseCThreads}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Interfaces, // this includes the LCL widgetset
  Forms, unit1
  { you can add units after this };

oder so:

program project1;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  Interfaces, // this includes the LCL widgetset
  Forms, unit1
  { you can add units after this };

Ich habe Ubuntu Breezy und meine Fonts in der Lazarus IDE sind zu groß

Falls Lazarus mit GTK1.2 kompiliert ist, haben die Einstellungen in Gnome Preferences/Font keine Auswirkungen, da sie sich auf GTK2 beziehen. Sie können diese Lösung versuchen: Erzeugen sie eine Datei mit dem Namen .gtkrc.mine in ihrem home Verzeichnis (falls sie dort nicht schon existiert) und fügen diese Zeilen hinzu:

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

class "GtkWidget" style "default-text"

Wie können meine Programme benutzerdefinierte rc Dateien verwenden?

Option a) Nennen sie die rc Datei yourprogram.gtkrc und kopieren sie sie in das selbe Verzeichnis wie die ausführbare Datei.

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

Ich habe Ubuntu und kann wegen fehlender Bibliotheken nicht für GTK2 kompilieren

Unter Ubuntu besteht das Problem, dass nicht alle notwendigen symbolischen Links erzeugt werden, wenn die Bibliotheken installiert werden. Überprüfen Sie deshalb, ob die fehlenden Bibliotheken die entsprechenden Links haben. Es kann zum Beispiel sein, dass Sie folgendes tun müssen:

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

Überprüfen sie, dass die [was-auch-immer].so symbolischen Links erzeugt wurden und auf die tatsächlichen Bibliotheken verweisen.

Wie kann ich ein Programm für GTK2 kompilieren?

Im Moment ist die GTK2 kompilierte IDE ein wenig instabil, aber sie können Software für GTK2 kompilieren unter Verwendung der GTK1 IDE.

Wenn Sie Ihre Software für GTK2 kompilieren möchten, gehen Sie in das Menü "Projekt -> Compilereinstellungen... -> Pfade" und ändern die LCL-Schnittstelle auf "GTK2" um.

Um die LCL für GTK2 zu kompilieren gehen Sie wie folgt vor: Gehen sie zum Menü "Werkzeuge"->""Lazarus erstellen" einrichten..." und setzen LCL erstellen auf clean+build und deaktivieren alles andere ("None"). Wählen Sie als LCL-Schnittstelle GTK2, bestätigen Sie Ihre Einstellungen mit OK.

Nun gehen Sie zum Menü "Werkzeuge"->"Lazarus erstellen".

Ich erhalte diese Meldung: "[WARNING] ** Multibyte character encodings (like UTF8) are not supported at the moment."

Seit Revision 10535 (0.9.21) existiert diese Meldung nicht mehr. Bisher wurde sie verwendet, um die Verwendung von UTF-8 Kodierung zu signalisieren. Der Grund war, dass die internen "keyhandling" - Routinen für den gtk1 - "Widgetset" diese Kodierung bei Tastendrücken nicht auswerten konnten. Als Folge davon wurden zum Beispiel Buchstaben mit Akzenten und andere sprachspezifische Sonderzeichen (ß, Ä, ...) falsch oder überhaupt nicht erkannt.

(originaler Text für ältere Lazarus Versionen)
Diese Warnmeldung signalisiert, dass Ihre lokal unterstützten (Schrift-)Zeichen UTF8-kompatibel sind. Bei der Benutzung der LCL-Schnittstelle gtk1 kann dies einige Progleme mit sich führen: Beispielsweise können sprachspezifische Sonderzeichen (ß, Ä, ...) möglicherweise nicht richtig dargestellt werden.

Um dies zu umgehen können Sie Ihre lokale Einstellung über die Kommandozeile ändern, bevor Sie Lazarus starten. Etwa so:

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

Ersetzen sie pt_BR durch den Eintrag für ihr Land. Sie können ein Skript erstellen, um dies zu automatisieren.

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.

Im Compilerverzeichnis existiert eine OS2 Scriptdatei mit Namen make.cmd. NT betrachtet diese auch als eine Scriptdatei, daher entfernen sie diese, weil wir sie unter NT nicht brauchen.

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

Wenn ich versuche, Lazarus zu erstellen (make), erhalte ich:

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

Sie müssen ihre make Datei upgraden.

makefile:27: *** Sie benötigen das GNU utils package to use this Makefile. Stop.

Stellen sie sicher, dass sie FPC nicht in ein Verzeichnis mit Leerzeichen im Namen installieren. Das Makefile unterstützt das nicht.

Wenn ich versuche, bei CVS einzuloggen, erhalte ich die Meldung: CVS.EXE [login aborted]: could not find out home directory

Auf einer Windows Plattform muss die HOME Umgebungsvariable ihren (CVS) Benutzernamen und Passwort aufbewahren. In der Kommandozeile geben sie ein:

 SET HOME=C:\MyHome

oder

 SET HOME=C:\WINDOWS

oder

 SET HOME=C:\WINDOWS\Profiles\YourLoginName

oder jeden anderen Ort, den sie wünschen.

Inzwischen erfolgte die Umstellung auf SVN (http://svn.freepascal.org/svn/lazarus/trunk_lazarus). Die CVS Daten werden nicht mehr aktualisiert und sollten daher nicht verwendet werden.

Wie kann ich meinem Programm einen XP Look geben wie Lazarus ihn hat?

Aktivieren sie die Einstellung unter Projekt -> Projekteinstellungen -> Themen mit Manifest-Datei einschalten.

macOS

Ich erhalte einen Fehler während des Linken, der besagt, dass /usr/bin/ld nicht -l<some lib> finden kann

Sie müssen die Bibliothek mit dem angegebenen Namen installieren und den Pfad zu ihr angeben. Ergänzen sie z.B. -Fl/usr/local/lib in fpc.cfg oder ihrem Lazarus Bibliothekspfad. Der Pfad zu einer Bibliothek hängt sehr davon ab, wie sie installiert wurde. Der Standard für fink ist /sw/lib, für MacPorts /opt/lib oder /opt/local/lib. Viele andere werden in /usr/local/lib installiert. Eine Besonderheit von macOS sind Frameworks. Die systemeigenen sind in /System/Library/Frameworks. Linken gegen diese Frameworks (z.B. OpenGL) erreicht man mit "-k-framework -kOpenGL". FPC reicht dann "-framework OpenGL" an den Linker weiter.

Warum schlägt die Kompilierung eines Projekts fehl mit 'unknown section attribute: no_dead_strip'?

Dead code stripping wird vom Assembler und Linker erst ab Tiger 10.4.0 unterstützt. Deaktivieren sie die Compileroptionen, wenn sie eine frühere Version verwenden.

  • Quelltext > Unit-Stil > Smart-Linkbar (-CX)
  • und Linken > Linker-Stil > Smart Linken (-XX)

Lizenzierung

Kann ich kommerzielle Anwendungen mit Lazarus erstellen ?

Ja, die LCL ist unter der LGPL lizensiert mit einer Ausnahme, die erlaubt, statisch gegen sie zu linken, ohne den Quelltext der Applikation freizugeben. Modifikationen und Verbesserungen der LCL müssen mit dem Quellcode ausgeliefert werden. Lazarus, die IDE, ist lizenziert unter der GPL. Die LCL besteht ausschließlich aus dem Quellcode in dem gleichnamigen Ordner "lcl".

Warum sind nicht alle Komponenten für kommerzielle Anwendungen erlaubt ?

Einige der Komponenten die mit Lazarus installiert werden, sind das Eigentum Dritter. Solche Komponenten unterliegen den Lizenzvereinbarungen die durch den jeweiligen Dritten verfügt wurden. Die Lizenzvereinbarungen im Detail sind den jeweiligen Quelltext-Dateien zu entnehmen. Solche Komponenten sind weitestgehend im Verzeichnis "components" gesammelt.

Wie kann ich feststellen ob eine Komponente zur LCL gehört ?

Alle zur LCL gehörenden Dateien befinden sich im Ordner "lcl". Eine Liste der entsprechenden Pascal Units befindet sich hier: http://lazarus-ccr.sourceforge.net/docs/lcl/ . Sollte Ihre Anwendung andere Units referenzieren ist es wahrscheinlich, dass Sie Komponenten außerhalb der LCL verwenden.

Can I make commercial plug-ins for Lazarus ?

Yes, the IDEIntf part of the IDE is licensed under the LGPL with the same exception, so that shared data structures in this part will not force you to license your plug-in or design-time package under the GPL. You are free to choose a plug-in of any license; we don't want to limit your choice. Therefore non-GPL compatible plug-ins are allowed. Note that it's not allowed to distribute a precompiled Lazarus with these non-GPL-compatible plugins included statically; however, we do not see this as a severe limitation, since recompiling Lazarus is easy.

Mitwirkende und Kommentare

Diese Seite wurde von der epikwiki Version konvertiert.