Programmportierung auf unterschiedlichen Basissystemebenen



  • Hallo,

    ich habe unterschiedliche Basissystemebenen - unterschiedliche Linuxbasissysteme und Windows-7-Basissysteme.

    Kann man besteht die Möglichkeit, dass C/C++-Programme sowohl auf Linux und gleichso auf Windows laufen, ohne, dass groß was umgemodelt werden muss - oder ist das kaum möglich? Sind die Basis-Systeme so unterschiedlicher Art, dass man immer viele unterschiedliche Programme anfertigen muss?



  • Standard C++ Programme laufen auf allen gängigen Plattformen (für Standard C Programme hast du dann wirklich für jede Plattform einen Compiler). Du musst dein Projekt halt einfach für jede Zielplattform neu kompilieren.



  • Hallo icarus,

    geht das dann auch, wenn ich Window-Programme schreibe - also mit Fenstern und unterschiedliche Fenster machen will mit Knöpfen, Buttons etc., dass die dann auch unter Linux einfach unkompliziert compiliert werden können? Unter Windows nutzt man z.B. diese Windows.h, geht die dann unter Linux auch? Und wie ist das mit Pfadangaben, unter Linux ist doch das eine Zeichen '/' und unter Windows das umgekehrte Zeichen, was in die andere Richtung zeigt: '\' - kann ich da Probleme kriegen wegen diesen beiden Zeichen und wegen den Verzeichnissen bei dem Linux, die alle in einer Startwurzel anfangen und andere Laufwerke und z.B. die USB-Ports Dateien im /dev-Verzeichnis sind, aber unter Windows z.B. eine USB-Schnittstelle z.B. COM1 heissen kann, wenn ein COM-Wandler am USB-Schnittstelle hängt?



  • regedit schrieb:

    Und wie ist das mit Pfadangaben, unter Linux ist doch das eine Zeichen '/' und unter Windows das umgekehrte Zeichen, was in die andere Richtung zeigt: '\' - kann ich da Probleme kriegen wegen diesen beiden Zeichen

    Seit Windows95 kannste auch / nehmen. Fast 20 Jahre später darf ich das Geheimnis hoffentlich schon lüften. 😉



  • regedit schrieb:

    Unter Windows nutzt man z.B. diese Windows.h, geht die dann unter Linux auch?

    Natürlich nicht!
    Da musst Du dann die Linux.h nehmen!


  • Mod

    Belli schrieb:

    regedit schrieb:

    Unter Windows nutzt man z.B. diese Windows.h, geht die dann unter Linux auch?

    Natürlich nicht!
    Da musst Du dann die Linux.h nehmen!

    Um dies mal auszuführen:
    Der Sprachumfang von streng standardkonformen C ist portabel. Was ist Standard C? Offensichtlich das, was im C-Standard beschrieben ist, aber was heißt das anschaulich? Das ist ein bisschen schwerer zu beschreiben. Ich versuche es mal: Alles was in solchen Listen steht:
    http://en.cppreference.com/w/c
    http://www.cplusplus.com/reference/clibrary/
    Das sieht auf den ersten Blick überwältigend viel aus, ist es aber nicht. Es sind hauptsächlich Funktionalität, mit der man Programmlogik umsetzen kann. Denn Logik ist überall gleich. Was nicht gleich ist, ist die Maschine, auf der die Programmlogik umgesetzt wird. Der C-Standard nimmt daher für die Maschine den kleinsten gemeinsamen Nenner an, den man von allen Plattformen erwarten kann (und macht sogar noch Ausnahmen für solche, die selbst dies nicht können). Eine Maschine ist ein schwarzer Kasten, da geht ein Papierstreifen rein, da stehen Zeichen drauf (stdin), die können von Programmen auf der Maschine gelesen werden. Es gehen zwei Papierstreifen raus, da kann die Maschine Zeichen draufdrucken (stderr und stdout).
    Das war's im Groben auch schon. Fenster, USB-Schnittstellen und so weiter kommen nicht vor. Es kommen nicht einmal Tastatur oder Bildschirm vor. All dies müssen daher Erweiterungen dieser Maschine sein und das ist der Moment, wo es unportabel werden kann. Denn manche dieser Erweiterungen funktionieren je nach Plattform unterschiedlich, windows.h-Sachen gibt es logischerweise unter Linux entweder gar nicht oder wenn doch, dann anders. Man muss daher wieder einen gemeinsamen Nenner finden, wenn man diese Dinge portabel nutzen möchte. Dann ist "portabel" eben auf Systeme mit Fenstern und USB-Schnittstellen beschränkt, es läuft also nicht mehr auf einem programmierbaren Toaster (ein streng standardkonformes C-Programm könnte das), sondern nur noch auf typischen Heimcomputern. Dieses Problem haben schon viele Leute gehabt, daher gibt es auch viele Lösungen, die dir portable Fenster erlauben. Guck mal hier:
    http://www.c-plusplus.net/forum/230583
    http://www.c-plusplus.net/forum/81596
    Zu USB-Schnittstellen kann ich nichts konkretes sagen, da gibt es gewiss ebenfalls irgendwelche portablen Bibliotheken.

    (Und da die Frage nahe liegt: Wie machen diese Bibliotheken, dass sie portabel sind? Die Antwort: Sie haben tatsächlich mehrmals den Code geschrieben, für jede Plattform einmal. Die gemeinsame Schnittstelle (also das, was du nutzt) ist dann portabel; der Code, der im Hintergrund wirkt, ist für jede Plattform angepasst)



  • [quote="Belli"][quote="regedit"]Unter Windows nutzt man z.B. diese Windows.h, geht die dann unter Linux auch?[/quote]Natürlich nicht!
    Da musst Du dann die Linux.h nehmen![/quote]

    Du magst mich jetzt ein bißchen aufs Korn und Kimme nehmen? Eine Linux.h gibt es nicht, zumindest habe ich noch nie mit der ein programm erstellt. Ist die Linux.h eine Geheimdatei? Hast Du sie bei sourceforge.net vielleicht für andere auch bereitgestellt?


  • Mod

    regedit schrieb:

    Belli schrieb:

    regedit schrieb:

    Unter Windows nutzt man z.B. diese Windows.h, geht die dann unter Linux auch?

    Natürlich nicht!
    Da musst Du dann die Linux.h nehmen!

    Du magst mich jetzt ein bißchen aufs Korn und Kimme nehmen? Eine Linux.h gibt es nicht, zumindest habe ich noch nie mit der ein programm erstellt. Ist die Linux.h eine Geheimdatei? Hast Du sie bei sourceforge.net vielleicht für andere auch bereitgestellt?

    Natürlich nimmt er dich ein bisschen auf's Korn. Weil eine ernsthaft gestellte Frage, ob es windows.h unter Linux gibt, schon ein bisschen doof ist.

    Du hast übrigens den BBCode abgeschaltet, daher sehen deine Beiträge so unformatiert aus. Entweder global in deinem Nutzerprofil oder du hast beim Absenden deines Beitrags "BBCode in diesem Beitrag deaktivieren" angekreuzt. Wenn du BBCode nicht deaktivierst, sehen deine Beiträge auch lesbar aus und alle sind glücklicher.



  • Natürlich nimmt er dich ein bisschen auf's Korn. Weil eine ernsthaft gestellte
    Frage, ob es windows.h unter Linux gibt, schon ein bisschen doof ist.

    Naja, es hätt ja auch sein können, dass es auch eine windows.h für Linux auch gäbe, damit das Programm ähnlich funktioniert auf Windows wie unter Linux. Aber es ist echt ziemlich kompliziert, wenn man ein C-Programm oder C++-Programm machen soll, was sowohl unter Linux wie auch unter Windows laufen soll mit all den Fenstern und dem Kram. Wahrscheinlich funktionieren die einfachen Programme mit dem printf("Hi"); auf beiden Systemen, aber so wie ich Dich verstanden habe mit

    Fenster, USB-Schnittstellen und so weiter kommen nicht vor. Es kommen nicht
    einmal Tastatur oder Bildschirm vor. All dies müssen daher Erweiterungen dieser
    Maschine sein und das ist der Moment, wo es unportabel werden kann. Denn manche >>dieser Erweiterungen funktionieren je nach Plattform unterschiedlich, windows.h-
    Sachen gibt es logischerweise unter Linux entweder gar nicht oder wenn doch,
    dann anders

    Aber ich finde das halt sehr schade, dass man das nicht so einfach hinkriegt, weilich ja so praktisch eine Fensteranwendung mit Fenstern und Buttons sowohl für Linux und dann auch für Windows-Basissysteme erstellen muss.

    Oder gibt es eine Art Migrationstool, mit dem man Windows-C/C++-Programme in Debia-Programme umwandeln kann?

    Ich hab jetzt auch grade etwas von Cross-Compilern gelesen. Kann ich damit dann gleich zweisprachig programmieren - also gleich für Windows und für Linux?



  • Gibt kein Übersetzungstool.

    SeppJs Links alle angeschaut?



  • volkard schrieb:

    Gibt kein Übersetzungstool.

    SeppJs Links alle angeschaut?

    jo schon, aber einige der Seiten sind auf englisch :-(. Das google-Übersetzungstool klappt nicht immer so zuverlässig.


  • Mod

    regedit schrieb:

    volkard schrieb:

    Gibt kein Übersetzungstool.

    SeppJs Links alle angeschaut?

    jo schon, aber einige der Seiten sind auf englisch :-(.

    Ohne Englisch wirst du sowieso nicht über einfache Textprogramme hinweg kommen, fürchte ich. Alles was über Grundlagen hinaus geht, gibt es in der Regel nur auf Englisch.

    Du scheinst auch nichts richtig verstanden zu haben, was ich schrieb:

    Aber ich finde das halt sehr schade, dass man das nicht so einfach hinkriegt, weilich ja so praktisch eine Fensteranwendung mit Fenstern und Buttons sowohl für Linux und dann auch für Windows-Basissysteme erstellen muss.

    Oder gibt es eine Art Migrationstool, mit dem man Windows-C/C++-Programme in Debia-Programme umwandeln kann?

    Doch, das geht eben dann, wenn du ein portables GUI-Framwork benutzt. Du musst dann gar nichts mehr dazu tun. "Problem" ist, dass diese Frameworks quasi eigene Sprachen sind, die nicht mehr viel mit Standard-C zu tun haben. Das ist insofern ein Problem, weil du
    a) anscheinend nicht einmal Standard-C wirklich beherrscht, was aber Grundvoraussetzung ist
    b) Diese Frameworks natürlich auch alle größtenteils nur auf Englisch dokumentiert sind.
    Dies ist aber insofern auch kein Problem, da diese beiden Punkte auch dann gelten würden, wenn du direkt mit den Betriebssystemmitteln der jeweiligen Plattformen deine GUIs programmieren würdest, anstatt ein fertiges Framework zu nutzen.

    Und das mit dem BBCode hast du auch nicht beachtet. Was irgendwie merkwürdig ist, denn standardmäßig ist das eingeschaltet und du musst es aktiv abgeschaltet haben. Du hast also aktiv ein Feature abgeschaltet, so dass wir uns nun deine handformatierten Beiträge antun müssen. Wir müssen also annehmen, dass du uns das Leben absichtlich schwer machst, was nicht gerade Hilfsbereitschaft fördert. Das verstärkt sich noch dadurch, dass du gegebene Antworten nicht aufmerksam gelesen hast.
    edit: Na bitte, es geht ja doch mit dem BBCode. Dein letzter Beitrag ist ja lesbar.



  • "so dass wir uns nun deine handformatierten Beiträge antun müssen"

    Was hast Du eigentlich an Handformatierungen dran auszusetzen? Ist Du von Pralinen auch nur das Sahnetoffee von Lindt und nicht ein Aldi-Produkt?

    SeppJ schrieb:

    Du scheinst auch nichts richtig verstanden zu haben, was ich geschrieben habe:

    Ich weis es nicht. Was meinst Du denn?

    SeppJ; schrieb:

    Doch, das geht eben dann, wenn du ein portables GUI-Framwork benutzt.

    Ist so ein portables GUI-Framework platformunabhängig? Funktioniert das dann mit Debian genauso wie mit Windows oder Android? Oder ist es da besser einen externen Interpreter zu verwenden? Aber ich habe jetzt gesehen, dass manche Interpreter auch mit C geschrieben wurden und dann selber compiliert werden müssen - für jede einzelne Platform speziell. Kann es sein, dass der Java-Interpreter als solcher auch in C programmiert wurde? Oder ist der in Assembler programmiert?



  • Wie hast du das eigentlich mit dem Durchstreichen von Text hinbekommen?



  • Langsam muss ich hier an blurry denken...



  • Mechanics schrieb:

    Langsam muss ich hier an blurry denken...

    Ich auch im anderen Thread. http://www.c-plusplus.net/forum/328294
    In http://www.c-plusplus.net/forum/328279 hab ich ihm ne Stunde geopfert für nix.


  • Mod

    Mechanics schrieb:

    Langsam muss ich hier an blurry denken...

    Geht mir auch so. Ich lasse es offen, da es prinzipiell klar gestellte Fragen sind (im Gegensatz zu blurry), aber ich kann nur jeden Leser empfehlen, hier keine Zeit mehr zu verschwenden. Mir ist es, wie volkard, ebenfalls schade um die bereits verschwendete Mühe.



  • Du nennst das
    http://www.c-plusplus.net/forum/328294
    ne klar gestellte Frage?
    Oioioi...
    Aber OK, löschen bzw. schliessen wäre vermutlich nicht ... verhältnismässig 😃


  • Mod

    hustbaer schrieb:

    Du nennst das
    http://www.c-plusplus.net/forum/328294
    ne klar gestellte Frage?
    Oioioi...

    Meine Ansprüche sind sehr niedrig geworden und ich musste mir trotzdem in letzter Zeit einiges anhören, dass ich noch viel zu kritisch in meinen Ansprüchen an klare Fragestellungen wäre...

    Dagegen sind diese Fragen hier geradezu wie von Descartes persönlich gestellt. Der Fragesteller leidet bloß unter Lernresistenz im Endstadium.



  • regedit schrieb:

    dass der Java-Interpreter als solcher auch in C programmiert wurde?

    Es sollte selbst dir aus der Generation Google gelingen, sowas festzustellen.


Log in to reply