Einzelnen Beitrag anzeigen

Benutzerbild von JamesTKirk
JamesTKirk

Registriert seit: 9. Sep 2004
Ort: München
604 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Von Windows ausführbares Programm für Linux / MaxOS X

  Alt 23. Jan 2012, 10:17
1) Generelle Frage: wie kann ich am besten von einem Windows System ausführbare Programme für Linux / MacOS X schreiben und kompilieren (Linux hat größere Priorität).
Üblich verwende ich Delphi 7, habe aber auch Lazarus installiert (scheint zu funktionieren).
Mit Delphi 7 wirst du diesbezüglich auf jeden Fall nicht weit kommen. Du könntest Delphi XE2 einsetzen oder eben Lazarus.

Bei XE2 müsstest du dich - falls du GUI-Anwendungen schreiben möchtest - mit FireMonkey beschäftigen, da die VCL unter Mac OS X und Linux nicht existiert.

Mit Lazarus kannst du einfach die LCL verwenden.

Grundsätzlich empfehle ich dir hier allerdings eine Linux VM zu verwenden, da du hier dann meist weniger Kopfschmerzen bezüglich der verwendeten Bibliotheken haben wirst (siehe Antwort auf Frage 2).

Für Mac OS X empfiehlt es sich meist einen Mac zu besitzen (ich kann nicht mitreden, da ich noch nie für Mac OS X programmiert habe).


Zitat von Cicaro:
2) Kann man denn Lazarus unter Windows auf Kompilierung für Linux umstellen ? Wenn ja, wie ?
Du benötigst:
  • Binutils (vor allem Linker), um von Windows nach Linux linken zu können. Du findest diese zum Beispiel hier (wahrscheinlich wirst du die für i386-linux benötigen)
  • den Quellcode von FPC (hier kannst du zum Beispiel den Quellcode verwenden, der zu deiner unter Lazarus verwendeten Version passt)

Entpacke den Quellcode in einen Ordner (ich nenne ihn einfach mal %fpcdir%). Die Binutils entpackst du ebenfalls (der Ordner heißt nun %bindir%). Öffne eine Kommandozeile und gehe nach %fpcdir%. Dort gibt du das folgende Kommande ein:

Code:
make all OS_TARGET=linux CPU_TARGET=i386 CROSSBINDIR=%bindir% BINUTILSPREFIX=%prefix%
Dabei ersetzt du %bindir% durch den entsprechenden Ordnernamen und %prefix% durch das gemeinsame Präfix der Binutils (wenn die binutils zum Beispiel "i386-linux-ld.exe", "i386-linux-as.exe", etc. heißen, dann gibst du für Präfix "i386-linux-" an (der abschließende Bindestrich ist teil des Präfix!).

Hat alles erfolgreich funktioniert dann kannst du die "Installation" durchführen. Hast du dich für die selbe FPC Version entschieden, die auch dein Lazarus verwendet, dann sollte folgendes reichen:

Code:
make crossinstall OS_TARGET=linux CPU_TARGET=i386 CROSSBINDIR=%bindir% BINUTILSPREFIX=%prefix% INSTALL_PREFIX=%lazdir%\fpc\%fpcver%
Hierbei entspricht %lazdir% dem Verzeichnis deiner Lazarus-Installation (zum Beispiel C:\Lazarus) und %fpcver% dem Versionsverzeichnis unterhalb von "fpc" (zum Beispiel 2.4.4 oder 2.6.0).

Hast du eine andere Version verwendet, dann mach das folgende:
Code:
 make all install INSTALL_PREFIX=%lazdir%\fpc\%newfpcver%
make crossinstall OS_TARGET=linux CPU_TARGET=i386 CROSSBINDIR=%bindir% BINUTILSPREFIX=%prefix% INSTALL_PREFIX=%lazdir%\fpc\%newfpcver%
copy %lazdir%\fpc\%fpcver%\bin\i386-win32\fpc.cfg %lazdir%\fpc\%newfpcver%\bin\i386-win32\
Hirebei ist %newfpcver% die Versionsnummer des Quellcodes den du verwendest (zum Beispiel 2.7.1).
In der kopierten "fpc.cfg" musst du dann noch alle Pfade korrigieren (ein Search and Replace von %fpcver% mit %newfpcver% (natürlich die richtigen Werte ) sollte ausreichen).

Nur nötig, falls du eine andere FPC Version verwendet hast:
Nun kannst du in Lazarus unter Einstellungen -> Einstellungen -> Umgebung -> Compilerdateiname den Pfad anpassen

Bei einem Projekt kannst du nun unter Projekt -> Projekteinstellungen -> Compilereinstellungen -> Codegenerierung das Zielsystem auf Linux umstellen. Unter Projekt -> Projekteinstellungen -> Compilereinstellungen -> Andere die folgenden Einträge hinzufügen (natürlich wieder durch die richtigen Werte ersetzen):

Code:
-XP%prefix%
-FD%bindir%
Achtung: Verwendest du weitere Bibliotheken oder die GUI-Schnittstelle ist noch weitere Arbeit nötig, die ich mir jedoch selbst erst anschauen müsste.

Summa summarum: Die Verwendung einer VM ist einfacher.

Zitat von cicaro:
3) Wie kann ich die Lazarus Ausgabedatei (exe) auf ein absolutes Minimum an Dateigröße reduzieren ?
Folgender Code bringt auf Lazarus 67 KB exe ein und auf Delphi 7 nur 14 KB.
Code:
program project1;

begin
end.
Ich muss eigentlich nichts weiter als eine einfache Zeile (1 Funktionsaufruf) mit Verwendung von der Unit ShellApi kompilieren. Was mich auf "stolze" 259 KB auf Lazarus wirft und auf 14 KB unter Delphi 7 verbleibt.
1. FPC Anwendungen sind immer etwas größer als Delphi Anwendungen, da noch die Abstraktionsschicht mit reinkommt, aber es gibt ein paar Möglichkeiten die Größe weiter zu reduzieren:
  • unter Projekt -> Projekteinstellungen -> Compilereinstellungen -> Linken die Option "Externe Datei mit gdb-Debugsymbolen nutzen (-Xg) aktivieren
  • auf der selben Seite "Smart Linken" aktivieren
  • auf der Seite "Codegenerierung" die Option "Smart-Linkbar" aktivieren

2. Die Unit ShellAPI ist nur unter Windows verfügbar, also versuch es gar nicht erst diese unter Linux oder OS X zu verwenden.

Gruß,
Sven
Sven
[Free Pascal Compiler Entwickler]
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat