![]() |
Für Linux compilen
Hallo, ich habe ein kleines Client - Server programm programmiert. Dieser verwaltet Accountdaten. Client und Server kommunizieren über Sockets mit einfachen Read- und Writeln befehlen. Die Accountdaten werden vom Client gesendet, der Server gleicht mit den ini Files ab und sendet die entsprechende Antwort.
Heute ist mir ein kleiner VServer für 1€ im Monat in die Hände gefallen. 5gb Festplatte, 64mb Ram, 10gb Traffic. Nichts besonderes aber ideal geeignet für mein kleines Projekt. Also dachte ich mir: Das Programm so umschreiben das es lokal auf eine SQL DB Zugreift und somit auf die ini Files verzichtet. ( Leider hab ich keinerlei Ahnung wie das funktioniert mit MySQL ). Dann bleibt noch die Frage ob Linux die Sockets versteht oder ob ich andere Lösungen finden muss. Die letzte Frage die sich stellt, ist wie man überhaupt für Linux compiled? Ich besitze einen SSH zugang und mein Server befindet sich monentan in einer Consolen Anwendung für Windows. Ich hoffe ihr könnt mir ein bisschen helfen. |
Re: Für Linux compilen
Zitat:
|
Re: Für Linux compilen
Zitat:
Damals gab es Kylix, das lief ganz gut. Demnächst könnte es einen Crosscompiler geben. Du kannst versuchen "freepascal" zu nutzen. |
Re: Für Linux compilen
Zitat:
Allerdings kannst du versuchen, dein Projekt nach FreePascal (bzw. Lazarus) zu portieren, womit sich dein Projekt auch für Linux und einige andere Systeme kompilieren lässt. Die Sprache ist nicht identisch zu Delphi, aber ähnlich - wenn du Glück hast, lässt es sich fast ohne Anpassungen kompilieren, wenn du Pech hast, musst du alles neu schreiben. |
Re: Für Linux compilen
@implementation:
Bitte, entweder was zum Thema sagen oder nichts posten. Zitat:
Schau Dir mal Lazarus / Freepascal an. Das geht eher in die Richtung. Alternativ kannst Du Dir auch mal den kostenlosen Command Line Compiler von Delphi Prism holen. Das benötigt dann lediglich ein installiertes Mono und funktioniert auch mit Datenbanken einwandfrei. Edith sagt: Zweimal andere schneller und ich hatte keinen roten Kasten.. strange... |
Re: Für Linux compilen
Wenn man die Direktive
Delphi-Quellcode:
benutzt, gibt es sprachlich (fast) keine Unterschiede. Umschreiben musst du den Code nur, wenn du die VCL verwendet hast. Dann musst du auf die FCL-LCL-Legierung umsteigen.
{$mode delphi}
|
Re: Für Linux compilen
Zitat:
Grüße, Max |
Re: Für Linux compilen
Kann man eigentlich mit einer Konsolen Anwendung einen SQL zugriff realisieren? Vor allem, wenn ich versuche den Code zu Portieren, klappt der Zugriff dann immernoch?
|
Re: Für Linux compilen
Zitat:
Viele Grüße, Michael |
Re: Für Linux compilen
ehrlich gesagt stehe ich jetzt komplett auf dem Schlauch. Über wine klappt das ganze schonmal garnicht. Und wie man einen SQL Zugriff realisiert weiß ich leider auch nicht obwohl ich schon mind. 10 verschiedene Tutorials gelesen habe.
|
Re: Für Linux compilen
Wieso benutzt du Wine?
Du kannst das Programm doch einfach nativ für Linux compilieren. Dann brauchst du Wine gar nicht mehr. |
Re: Für Linux compilen
Zitat:
|
Re: Für Linux compilen
Wenn er eine Konsolenanwendung haben will muss er einfach nur die IDE öffnen,
de´n Quelltext laden und eventuell noch den Quelltext so umschreiben, dass er nichts Windows-spezifisches benutzt. Dann auf das Menü "Run" klicken und je nach Wunsch auf den Menüpunkt "Compile" oder "Run". |
Re: Für Linux compilen
Also mein Quellcode sieht aktuell so aus:
Delphi-Quellcode:
Ich hab ihn jetzt mal versucht über ein Linux VMWare mit FPC zu compilen aber irgentwie bin ich anscheiennd zu doof dazu. Wenn ich mit wine emulieren will dann sagt er irgentwas von X-Servern und Grafiktreibern.
program Project1;
{$APPTYPE CONSOLE} uses SysUtils, windows, IdTCPServer, IdContext, IdBaseComponent, IdComponent, ComCtrls; type TServer = class(TObject) IdTCPServer1: TIdTCPServer; procedure IdTCPServer1Execute(AThread: TIdContext); procedure IdTCPServer1Connect(AThread: TIdContext); private { Private declarations } constructor Create; public { Public declarations } end; Const Version = '0.02'; type TDynStringArray = Array of string; function Explode(const Separator, S :String; Limit :Integer = 0): TDynStringArray; var SepLen: Integer; F, P: PChar; begin SetLength(Result, 0); if (S = '') or (Limit < 0) then Exit; if Separator = '' then begin SetLength(Result, 1); Result[0] := S; Exit; end; SepLen := Length(Separator); P := PChar(S); while P^ <> #0 do begin F := P; P := AnsiStrPos(P, PChar(Separator)); if (P = nil) or ((Limit > 0) and (Length(Result) = Limit - 1)) then P := StrEnd(F); SetLength(Result, Length(Result) + 1); SetString(Result[High(Result)], F, P - F); F := P; if P = Separator then SetLength(Result, Length(Result) + 1); while (P^ <> #0) and (P - F < SepLen) do Inc(P); end; end; procedure TServer.IdTCPServer1Execute(AThread: TIdContext); var Data : String; StrArr : TDynStringArray; LI :TListItem; begin with AThread.Connection do begin Data := String(Socket.ReadLn); Data := Trim(Data); WriteLn(Data); if Length(Data) > 0 then begin StrArr := Explode('|', Data); if StrArr[0] = 'login' then begin if StrArr[3] <> Version then begin Socket.WriteLn('version'); end else begin if (StrArr[1] = 'test') and (StrArr[2] = '123') then begin Socket.WriteLn('login'); end else begin Socket.WriteLn('invalid'); end; end; end; end; end; end; procedure TServer.IdTCPServer1Connect(AThread: TIdContext); begin WriteLn('Client verbunden.'); end; constructor TServer.Create; begin inherited Create; WriteLn('#######################'); WriteLn('## ##'); WriteLn('## Masterserver '+version+' ##'); WriteLn('## ##'); WriteLn('#######################'); WriteLn(''); IdTCPServer1 := TIdTCPServer.Create(nil); WriteLn('Server wurde initialisiert.'); IdTCPServer1.DefaultPort := 5000; WriteLn('Server lauscht auf Port: '+InttoStr(IdTCPServer1.DefaultPort)); IdTCPServer1.TerminateWaitTime := 5000; IdTCPServer1.OnConnect := IdTCPServer1Connect; IdTCPServer1.OnExecute := IdTCPServer1Execute; end; var Server : TServer; begin Server := TServer.Create; Server.IdTCPServer1.Active := True; While True do sleep(10); end. An der Stelle wo jetzt if (StrArr[1] = 'test') and (StrArr[2] = '123') then steht versuche ich noch herauszufinden wie ich eine SQL Datenbank benutzen kann was sich leider als weit schwieriger erweißt als erwartet. |
Re: Für Linux compilen
Wo liegt denn das Problem beim FPC? Fehlermeldung?
Welche Version verwendest du? Welches Linux? Bei ist die FreePascal-IDE /usr/bin/fp und der Kommandozeilencompiler /usr/bin/fpc Ich habe Version 2.2.4 auf Debian (lenny) |
Re: Für Linux compilen
Project1.dpr(14,4) Warning: Constructor should be public
Project1.dpr(41,8) Error: Illegal type conversion: "ShortString" to "^Char" Project1.dpr(45,26) Error: Illegal type conversion: "ShortString" to "^Char" Project1.dpr(114,47) Error: Wrong number of parameters specified for call to "IdTCPServer1Connect" Project1.dpr(95,19) Hint: Found declaration: TServer.IdTCPServer1Connect(TIdContext); Project1.dpr(115,47) Error: Wrong number of parameters specified for call to "IdTCPServer1Execute" Project1.dpr(59,19) Hint: Found declaration: TServer.IdTCPServer1Execute(TIdContext); Project1.dpr(125) Fatal: There were 4 errors compiling module, stopping |
Re: Für Linux compilen
Hallo RedShakal, siehe folgenden Thread.
![]() lg. Astat |
Re: Für Linux compilen
Zwei der Meldungen kannst du evtl. lösen, indem du folgende Direktive benutzt:
Delphi-Quellcode:
{$mode delphi}
|
Re: Für Linux compilen
Unter FPC werden events durch Adressen verknüpft. Also z.B.
Delphi-Quellcode:
Außerdem musst du die Indy-Komponenten für Lazarus kompilieren und installieren.
IdTCPServer1.OnConnect := @IdTCPServer1Connect;
IdTCPServer1.OnExecute := @IdTCPServer1Execute; (Bei dem einfachen Programm würde ich das aber mit Synapse oder LNet neu schreiben, das ist wesentlich stressfreier und vor allem schneller.) |
Re: Für Linux compilen
Mit genannter Direktive läuft auch das:
Delphi-Quellcode:
IdTCPServer1.OnConnect := IdTCPServer1Connect;
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:15 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz