Cross Compiling Grundlagen



  • Sehr geehrte Community,

    Ich stehe vor einem Problem,was sich anscheinend relativ leicht lösen lässt. Ich arbeite mit GCC (MinGW) unter Windows und arbeite mit libs von Linux. Die Lib- und Header Ordner dieser DateienNun habe ich den Quelltext compiliert unddie Header Files Nun habe ich so richtig erst mit Linux begonnen zu programmieren und benötige einige Einstiegsschubser.

    Was ist der Pendant unter Windows zu object Dateien ? Dlls?
    Wenn ja warum wird beides zusammengehauen sprich beim Compilieren genutzt? Sprich was wird gebraucht beim Linken? Dlls oder Objectdateien?

    Was wird bei MinGW erzeugt? eine .exe oder .out? Ich nehme an exe oder?

    Sorry, ich bin noch etwas unterbedarft.

    Mfg, Inge



  • Ingeborg schrieb:

    Was ist der Pendant unter Windows zu object Dateien ? Dlls?

    Das Gegenstück von Objektdateien sind unter Windows tatsächlich Objektdateien. Das hat nichts mit dem Betriebssystem zu tun, diese werden von deinem Compiler erstellt.

    Ingeborg schrieb:

    Wenn ja warum wird beides zusammengehauen sprich beim Compilieren genutzt? Sprich was wird gebraucht beim Linken? Dlls oder Objectdateien?

    Du benötigst zum Linken alle Informationen, um die verwendeten Symbole auflösen zu können. Das können auch nur Verweise auf eine dynamische Bibliothek sein. Konkretes kann man aber hier nicht sagen, weil es von deiner Toolchain abhängt.

    Ingeborg schrieb:

    Was wird bei MinGW erzeugt? eine .exe oder .out? Ich nehme an exe oder?

    Das sind nur Namen. Unter Linux sogar völlig bedeutungslos. Unter Windows muss die Anwendung die Erweiterung exe tragen. Das hat aber nichts mit dem System zu tun, prinzipiell könnten die Anwendungen dort auch jeden beliebigen Namen tragen.

    Ingeborg schrieb:

    Sorry, ich bin noch etwas unterbedarft.

    Jeder muss mal klein anfangen.



  • dlls und .o sind also zwei komplett eigene Dinge. Oje.

    Was gibt es denn da für einen Leitfaden was wann mit eingehangen werden muss??

    Also eine Object ist nichts weiter vorkompilierte und geparster Code einezelner Funktionen. Dlls sind sowas ähnliches, nur halt für Microsoft. Beide können beliebigen Programmen zugelinkt werden. Was ist der Unterschied zwischen diesen beiden Formaten? Ich bin massivst verwirrt...

    Vielen Dank bis hierher und schöne Grüße!

    Inge



  • Ingeborg schrieb:

    dlls und .o sind also zwei komplett eigene Dinge. Oje.

    Naja, so ganz nun auch wieder nicht. Der Compiler kann ja auch nicht zaubern. Stell dir einfach eine dll als ein Objekt-File vor, welches zur Laufzeit gelinkt wird. Damit hast du die wesentlichen Unterschiede für dich erfasst, denke ich.

    Ingeborg schrieb:

    Was gibt es denn da für einen Leitfaden was wann mit eingehangen werden muss??

    Wie schon angemerkt, immer das was du benötigst. Das man eine dynamische Lib dynamisch linkt und umgekehrt eine statische statisch, brauch ich denke ich nicht extra zu erwähnen. Das sieht man dann aber schon, was noch fehlt. Deswegen muss man sich nicht den Kopf zerbrechen.

    Ingeborg schrieb:

    Also eine Object ist nichts weiter vorkompilierte und geparster Code einezelner Funktionen. Dlls sind sowas ähnliches, nur halt für Microsoft.

    Ja. Wobei der Begriff meist nicht richtig verwendet wird. Dll sind wie du schon festgestellt hast dynamischer linkbarer Code, für Windows. Unter Linux heißt das Prinzip shared objekt. Dort sind dann die Unterschiede zu den normalen Objekt-Files auch nur noch gering, im Gegensatz zu Windows.

    Ingeborg schrieb:

    Beide können beliebigen Programmen zugelinkt werden. Was ist der Unterschied zwischen diesen beiden Formaten? Ich bin massivst verwirrt...

    Der Unterschied eines Objekt-Files zu einer DLL ist im wesentlichen, dass der Linker bei der DLL nur eine Art Platzhalter verknüpft. Die wirkliche Funktion wird erst zur Laufzeit ermittelt. Wenn du ein Objekt-File linkst muss die Funktion bekannt sein.



  • Ok, jetzt habe ich meine Linuxlibs zum laufen bekommen und kan mit dem MinGW-Compiler entsprechende Codes zum laufen bringen. Kann ich die erstellten dlls nun einfach z.B. mit dem LCC-Compiler einbinden?


Anmelden zum Antworten