AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung Von Windows ausführbares Programm für Linux / MaxOS X
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von Cicaro · begonnen am 23. Jan 2012 · letzter Beitrag vom 13. Feb 2012
Antwort Antwort
Cicaro

Registriert seit: 9. Feb 2005
285 Beiträge
 
Delphi 7 Personal
 
#1

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

  Alt 23. Jan 2012, 09:24
Hallo.

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

2) Kann man denn Lazarus unter Windows auf Kompilierung für Linux umstellen ? Wenn ja, wie ?

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.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.582 Beiträge
 
Delphi 11 Alexandria
 
#2

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

  Alt 23. Jan 2012, 10:14
Wenn es dir auf die Dateigröße so ankommt (dass es sowas heute immer noch gibt...), nimm C++, da sind die Dateien schon noch am kleinsten.

Bei Lazarus wird die Datei vermutlich kleiner, wenn du die Debuginformationen aus der Exe rauswirfst.

Und wenn du Lazarus benutzt, solltest du auch unter Linux kompilieren. Das von Windows aus zu machen ist zwar möglich, aber sehr kompliziert und aufwendig.

Dann zur Unit ShellAPI:
Was für eine Funktion benutzt du denn, die auch unter Linux existiert? Ich dachte die Unit wäre nur für Windows.
Reicht nicht vielleicht einfach ein Bash-Skript?
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
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
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#4

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

  Alt 23. Jan 2012, 10:23
Java!
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#5

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

  Alt 23. Jan 2012, 10:27
Zitat:
2) Kann man denn Lazarus unter Windows auf Kompilierung für Linux umstellen ? Wenn ja, wie ?
Passenden CrossCompiler herunterladen oder selbet kompillieren. Plattform kann dann beim Compiler als Parameter angegeben werden
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von JamesTKirk
JamesTKirk

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

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

  Alt 24. Jan 2012, 09:58
Zitat:
2) Kann man denn Lazarus unter Windows auf Kompilierung für Linux umstellen ? Wenn ja, wie ?
Passenden CrossCompiler herunterladen oder selbet kompillieren. Plattform kann dann beim Compiler als Parameter angegeben werden
Da es keinen fertigen Cross-Compiler von Windows auf Linux gibt, bleibt nur die Möglichkeit diesen selbst zu kompilieren und das habe ich in meinem Post dargelegt wie (kompliziert) das geht.

Was seit August in einem Branch von FPC auch funktioniert. Mehr dazu hier.

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

Registriert seit: 27. Nov 2010
46 Beiträge
 
#7

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

  Alt 13. Feb 2012, 14:31
Code:
D:\lazarus\fpc\2.6.0\bin\i386-win32>make all OS_TARGET=linux CPU_TARGET=powerpc CROSSBINDIR=C:\bin BINUTILSPREFIX=i386-linux-
make: *** No rule to make target `all'. Stop.

D:\lazarus\fpc\2.6.0\bin\i386-win32>
Code:

D:\lazarus\fpc\2.6.0\bin\i386-win32>make OS_TARGET=linux CPU_TARGET=powerpc CROSSBINDIR=C:\bin BINUTILSPREFIX=i386-linux-
make: *** No targets specified and no makefile found. Stop.

D:\lazarus\fpc\2.6.0\bin\i386-win32>
@JamesTKirk kannst du mir sagen warum das nicht funktioniert?

Ich habe die binutils-2.15-win32-powerpc-linux.zip runtergeladen und entpackt. Würde das gerne für die Architektur powerpc machen.
Aber irgendwie klappt das nicht!
  Mit Zitat antworten Zitat
Benutzerbild von PhilmacFLy
PhilmacFLy

Registriert seit: 20. Jan 2008
Ort: Nürnberg
340 Beiträge
 
FreePascal / Lazarus
 
#8

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

  Alt 13. Feb 2012, 16:16
I had a problem and decided to use Java. Now I have a ProblemFactory

Also ich hab auch die besten Erfahrungen damit gemacht unter Linux für Linux und Windows zu compilen, alles andere istwirklich Pain in the Ass.
Zu MAC OS X kann ich leider nix sagen
Philipp N.
"Programmiern ist wie küssen:
Mann kan darüber reden, mann kann es beschreiben,
aber man weiss erst, was es bedeutet,
wenn man es getan hat"
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:09 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz