2017-04-23 4 views
-5

Ich habe eine CPP-Anwendung für eine einzige Datei, die für Windows erstellt wurde und nur in der Befehlszeile ausgeführt wird.CPP - Quellcode von Windows nach Linux konvertieren

Ich versuche, es auch für Linux kompilierbar zu machen.

Die einzigen Bibliotheken die App verwenden, sind:

#include <iostream> 
#include "setjmp.h" 
#include "windows.h" 
#include "time.h" 

Es auch alle Arten von unsignierten ganzen Zahlen verwendet (uint8, uint16, uint32, uint64).

Ansonsten gibt es keine anderen Windows-spezifischen APIs.

Meine Frage ist, wie Sie den Code konvertieren, so dass es mit Linux kompatibel sein wird? Gibt es einen einfachen Weg, dies zu tun?

+1

Warum verwenden Sie SJLJ in C++? –

+5

Dies ist zu breit, da 'windows.h' fast alle Winapis enthält. Sie benötigen genaue Quelle, um eine Antwort zu erhalten. –

+2

Alle Header, die Sie anzeigen, sind Systemheader und sollten spitze Klammern '<>' verwenden. –

Antwort

1

Tun Sie es andersherum. Code, mit wahrscheinlich eine Cross-Plattform-Framework wie Poco oder Qt (die auch verwendbar in Nicht-GUI-Code, zB QtCoreohneQtGui verwenden) oder Boost in einigen unabhängigen Weg, um Windows und kompilieren Sie es regelmäßig auf beiden OSes .

BTW setjmp.h ist C++ unfreundlich (messing und inkompatibel mit C++ - Ausnahmen), auch unter Windows.

entfernen So

#include "setjmp.h" /// wrong in all C++ programs 
#include "windows.h" //// specific to Windows 

dann den Code korrigieren (zum Beispiel alle Kompilierungsfehlern, aber unter Linux mit allen warnin & Debug-Informationen, zum Beispiel mit g++ -Wall -Wextra -g kompilieren), wahrscheinlich einige Rahmenbedingungen wie die, die ich mit erwähnt.

nicht konvertieren C++ Code (von Windows zu Linux) aber versuchen hart tragbaren C++ Code, dank einiger gut gewählt Rahmen zu schreiben.

Vielleicht könnte Ihre Anwendung in einigen reinen tragbaren C++ 11 geschrieben werden (aber dann, keine Notwendigkeit, #include "windows.h"). Befehlszeilendienstprogramme wie wc, cat, grep (mit einer Teilmenge aller Features) könnten wahrscheinlich in portable C++ 11 geschrieben werden - und benötigen möglicherweise nicht einmal ein zusätzliches Framework.

PS. Ohne Ihren Quellcode und ohne eine Vorstellung davon, was diese Anwendung ist, ist es unmöglich, Ihnen mehr zu helfen. Ihre erste Aufgabe ist es, diesen Code genau zu verstehen und was er unter Windows tun soll. Vielleicht ist es der schnellste Weg, es in sauberes C++ 11 zu schreiben (vielleicht mit einem zusätzlichen Framework ...).

+0

Das Programm ist in Visual CPP geschrieben. Ich will es nicht umschreiben, es sei denn, ich habe keine andere Wahl. – tush

+3

Sie müssen nicht alles * neu schreiben *. Sie müssen nur diejenigen Dinge umcodieren, die zum Scheitern verurteilt sind. Für einigermaßen sauberen Code sollte das einigermaßen einfach sein. Aber "setjmp.h" 'ist in C++ auch unter Windows falsch, also denke ich, dass Ihr Code ziemlich chaotisch und fehlerhaft ist (sogar unter Windows). –

+0

Ich wünschte, es wäre mein Code - Es hätte mir eine Menge Kopfschmerzen erspart. Dies ist ein alter Code von jemandem, der nicht mehr in meiner Firma arbeitet und jetzt muss ich ihn für Linux kompilieren (Wein ist keine Option). – tush