Konsolenanwendung für Linux kompilieren
-
Ich habe mit C++ Builder 6 ein Konsolenprogramm (für Windows) erstellt. Es werden keine Windowsspezifischen Funktionen verwendet, da im Grossen und Ganzen die Aufgabe des Programms darin besteht, Dateien in ein anderes Format zu konvertieren.
Nun sollte dieses Programm auch unter Linux lauffähig sein. Ein erster Versuch mit wine unter Linux hat gezeigt, dass es so ginge. Allerdings möchte ich richtige Linux-Binaries haben; also meine Frage: Wie kann ich am einfachsten das BCPP 6 Projekt für Linux kompilieren? - Einfach nach Linux portieren, dort z.B. mit GCC kompilieren geht eben nicht, weil ich überall die Klasse AnsiString verwende, welche ja nicht C++ Standard ist.
Gibt es ein Tool, mit welchem man vielleicht sogar unter Windows das Projekt für Linux kompilieren kann? Oder mit einer neueren Version von C++ Builder? (z.B. mit C++ BuilderX) Habe keine Ahnung. Ich denke aber, dass es ja nicht soo schwierig sein sollte, da es ja nur ein Konsolenprogramm ist!Bin für jeden Tip dankbar!
- Adrian
-
Hallo
du must dich wohl entscheiden : Willst du den BCB mit den VCL-Erweiterungen benutzen, oder willst du plattformunabhängige C++ Programme schreiben?
Es bleiben dir aus meiner Sicht nur zwei Möglichkeiten, und in beiden must du dein Projekt umschreiben :
- alle VCL-Sachen durch Standard- und externe portierbare Gegenstücke ersetzen. Z.b. AnsiString duch std::string
- du benutzt Kylix, ein Linux-Abkömmling vom Builder. Aber auch da must du einiges umschreiben, den CLX ist nicht gleich VCL.bis bald
akari
-
Danke erstmal für Deine rasche Hilfe!
Das einizige von VCL, das ich brauche, ist AnsiString. Wie gesagt, es handelt sich um eine Konsolenanwendung; also es existieren keine Grafischen Elemente. Siehst Du da eine Chance, eins zu eins das Projekt mit Kylix zu kompilieren?
- Adrian
-
Hallo
wenn es nur um AnsiString geht (und du nicht noch regen Gebrauch der dahinterstehenden Funktionen machst, die alle AnsiString erfordern) must du diesen nur durch std::string ersetzen, das auch alle Basisfunktionen bietet. Dann hast du ein komplettes Compiler-unabhängiges Programmm, also sollte dann das beste sein.
Kylix ist eh so ein Wackelkandidat.
bis bald
akari
-
Soo, habe nun die String-Sache erledigt. Also AnsiString bietet natürlich schon noch etwas mehr Komfort als std::string. Das habe ich nun aber angepasst.
Schon freute ich mich, die Arbeit erledigt zu haben, als ich erst bemerkte, dass ich ja regen gebrauch von der borlandspezifischen__closureExtension für die Auslösung von Ereignissen gebrauch gemacht habe... Oooo weee!!! Da muss ich wohl alles umkrempeln, oder? Oder wie bringt man das am einfachsten in den C++ standard über?
- Adrian
PS: Hier ein Klassenbeispiel mit der Extension...
class CParser { private: string mSourceFile; CTag *mCurrentTag; CRootTag mRoot; ifstream *mIfstream; void mReadTag (string &data, string &tag); void mRecursiveIterate (CTag *tag); public: CParser(); void assignFile(string source) { mSourceFile = source; } vector<STagList> tagList; void parseFile(); void IterateToEnd(); void importTagReplaceList(string fileName); string expandLatexTag (string data); void (__closure *OnOpenTag)(CTag *tag, string tagName, int tagLevel); void (__closure *OnCloseTag)(CTag *tag, string tagName, int tagLevel); void (__closure *OnData)(CTag *tag, string data, int tagLevel, int idx); };
-
Hallo
grundsätzlich durch Function Pointer.
Allerdings sind damit nur eingeschränkt Pointer auf Klassenmethoden möglich. Das heiß es muß die Klasse fest angegeben werden, von die Methoden ausgewählt werden können. Genau um diese Freiheit erweitert ja die VCL mit __closure den Standard.Willst du das auch complilerübergreifend, must du z.B. Boost installieren und boost::signals benutzten.
bis bald
akari
-
Danke für Deine Hilfe!
Eben funktioniert das ganze nicht wirklich mit Funktionspointern...
Das heiß es muß die Klasse fest angegeben werden
Danke für Deinen Link. Ich denke, dort finde ich was ich brauche (hoffentlich)..
(Ich weiss nämlich noch nicht genau, was Du genau mit der obigen Aussage meinst.)Boost kenne ich nicht. Ich werde mal danach suchen...
Vielen Dank!
- Adrian