Ich bin schwach und faul und deshalb benutze ich Microsoft WindowsXP (tm und (r) und/oder (c)).
Wenn ich aber dafür sorgen möchte, dass auch die charakterstarken und arbeitswilligen Linuxer mein Prog benutzen können, worauf muss ich da achten?
Registriert: Sa Okt 22, 2005 20:24 Beiträge: 291 Wohnort: Frauenfeld/CH
da in linux files nicht ausführbar sind, die für windows geschaffen wurden, muss man das zeug in linux unter kylix oder freepascal neu kompilieren. dazu darfst du in delphi nicht alle befehle verwenden (keine windows fensterverwaltung, SDL) und natürlich auch keine windows - spezifischen OpenGL befehle.
das ganze machst du wegen den zwei orten wo du was programmieren musst am besten mit den befehlen die direkt an den compiler gehen, das geht dann so:
Code:
{$IFDEF Win32}
{$ELSE}
wichtig ist aber nebenbei noch, das wenn du das resultat nicht unbedingt einer grossen menge von leuten presentieren willst und das projekt nur ein kleines ist, es sich meistens nicht lohnt, das ganze plattformunabhänig zu programmieren, weil die meisten das ganze warscheinlich nicht mal unter linux kompilieren werden
Registriert: Sa Mai 04, 2002 19:48 Beiträge: 3830 Wohnort: Tespe (nahe Hamburg)
Defacto braucht man solche Weichen in der Praxis nicht. Das wichtige ist halt, dass man nur auf Bibliotheken und Schnittstellen zugreift, die es in beiden Welten gibt. Ergo z.B. statt der VCL lieber SDL verwenden. Grundsätzlich sollte es einen alamieren, wenn als Unit "Windows" eingebunden wird. Hat man die Fensterverwaltung und Steuerung erst einmal z.B. auf SDL übersetzt, gibt es meist eher wenige Probleme eine Anwendung plattformunabhängig zu entwickeln. Zumindest dann, wenn man sein Projekt vernünftig struktiert hat. Beispiele für plattformunabhängige Programme findest Du zuhaust in unseren SDKs. Primär werden diese für Linux entwickelt und dann lediglich in einem Windows-Paket noch einmal mit einem Installer zusammen geschnürrt.
_________________ "Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."
Registriert: Di Mai 18, 2004 16:45 Beiträge: 2623 Wohnort: Berlin
Programmiersprache: Go, C/C++
Mir fehlt eigentlich noch die Auswahlmöglichkeit "Linux und Windows". Ich habe nun Windows angekreutzt da ich momentan ein bischen mehr in Windows unterwegs bin.
Zu dem Thema ist nicht alzuviel zu wissen.
Unter Windows kannst du Delphi und FPC nutzten und unter Linux und Mac OS FPC.
Anmerkung an Evil-Devil: FPC ünterstützt viele Nintendo Consolen, embed Linux für arm Prozessoren(z.B. GP2X), Mac OS und inoffiziel noch wesentlich mehr wie z.B. PSP.
Je nach Projektgröße kann es passieren , dass du mehrspurig fahren muss mit deinem Code ist aber wirklich sehr selten.
Bei mir hab ich bisher nur eine Handvoll von unterscheidungen zwischen Delphi und FreePascal im Code.
Ein Beispiel hier wäre folgender: Zlib ist in FreePascal mit im Paket aber für Delphi muss extra eine Unit geladen werden und diese ist bisher auch nur ein linker auf die dll. So ist unter FPC keine Lib nötig und wenn ich mit Delphi compiliere, muss ich die Lib mit bei legen.
Ich konnte bisher sonnst den Code immer so anpassen , dass er mit beiden compilern compilierbar ist.
Ich selber ziehe FPC vor, da ich kein VCL nutzte und Delphi mir sonnst keinen weiteren Vorteil bietet, der mir wichtig wäre.
Mit FPC compilierter Code ist in der Regel besser optimiert und somit spürbar schneller. Als Debugger hat man gdb, als Frontend kann man Insight nutzen und als IDE wenn gewollt Lazarus.
Wenn man Portablen Code schreiben will, dann sollte man aufjedenfall sich eine Strukturierung der Daten zulegen.
Zum Beispiel:
OS bezogener Code
Projekt/win32
Projekt/linux
...
Unterscheiden kann man dann den Code je nach Situation, wie folgt.
Code:
uses
{$IFDEF FPC}
// Freepascal code
bla in '../fpc/bla.pas'
{$ELSE}
// Delphi Code
bla in '../delphi/bla.pas'
{$ENDIF};
Code:
var
{$IFDEF Win32}
DirSeperator:='';
{$ELSE}
DirSeperator:='/';
{$ENDIF};
Wichtig sind natürlich welche Libs man verwendet, ich selber nutzte folgende:
-SDL und auf SDL aufbauende wie z.B. SDL_Image
-OpenGL
-OpenAL
-Ogg Vorbis
-zLib
-Newton
Diese libs funktionieren unter den 3 größten Desktop Betriebssystemen(windows,linux,mac os), werden stark gepflegt und sind sehr verbreitet.
_________________ "Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren" Benjamin Franklin
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
@Umfrage:
Es sollte noch die möglichkeit "Linux und Windows" geben.
Gruß Lord Horazont
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
1. Ich komme nochmal auf meine Eingangsfrage zurück (bezüglich slash und backslash), auf die ich eine Antwort bräuchte (so etwas wie "NATÜRLICH musst Du da unterscheiden!").
2. Wenn ich das recht verstehe ist SDL eine Art Vermittler zwischen mir (Programmierer) und API (Windows, X11) und setzt das Ganze je nach OS einfach in entsprechende API-Befehle um. Da frag ich mich (als unwissender Anfänger), ob das nicht langsamer ist, als wenn mans selbst machte...
3. FPC klingt so ja schon mal interessant. Ich kann im Moment aber nicht umsteigen, weil das hieße, sich auch noch da einzuarbeiten, bin mit ogl aber bereits gut ausgelastet. Trotzdem sehr interessant... mhmja :)
4. Ich kam zu dem Schluss, dass es Schwachsinn ist, VCL mit SDL einzusetzen (in einer Anwendung mit mehreren Fenstern wie einem Leveleditor etc.), weil man die erreichte Plattformunabhängigkeit damit wieder gegen hübsche controls eintauscht. Kann man das irgendwie kompensieren oder müsste ich controls dann selbst coden (da hätt ich schon Bock drauf, so isses nicht...)?
Registriert: Di Mai 18, 2004 16:45 Beiträge: 2623 Wohnort: Berlin
Programmiersprache: Go, C/C++
1. Hatte ich ganz zum Schluss meines letzten Posts, als codefetzen beantwortet.
2. Man könnte sagen SDL ist ein wrapper aber SDL bietet neben dem durschleifen von Befehlen auf der jeweiligen API auch eigene Funktionen an. Diese sind sehr sehr nützlich und sehr für OpenGL und 2D programmierung ausgelegt.
SDL ist geringfügig langsamer, da ein funktionsaufruf zu dem normalen code dazu kommt. Was bedeutet pro SDL Befehl kommen noch ne Handvoll Takte hinzu(push der Parameter auf den Stack,push der funktionsadresse,sprung zum code, ausführen des eigentlichen codes) aber das ist sowas von unmerkbar, da man mitlerweile mehere milliarden Takte pro sekunde zur verfügung hat.
3. FPC ist einfach nur ein Kommandozeilen compiler ohne ide. FPC bietet ein sehr guten Delphi kompatiblen Mode an und somit ist ledeglich ne gewöhnung an eine nicht vorhandene codevervollständigung.
4. Das schlüsselwort ist Lazarus, eine IDE die den FreePascal Compiler benutzt. Sie bietet ein umfangreiches Componentensortiment.
Nachteil, die Windows Version wird nicht großartig supported aber die Linux Version ist dafür sehr gut.
Ich überlege momentan auch noch wie ich meine Tools realisieren soll, da Lazarus und Delphi nicht mit einander können und ich für Tool schon eine oberfläche brauche. Meine bisherige Idee ist ein Tool zu schreiben was die Engine GUI nutzt um Tools zu schreiben.
So könnte man dann die GUI in eine XML file speichern und der code ganz normal in pas.
Man könnte es dann überall compilieren und müsste aber zum ändern von der GUI dann das mitgelieferte Tool nehmen.
_________________ "Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren" Benjamin Franklin
Mitglieder in diesem Forum: 0 Mitglieder und 27 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.