Grundsätzliches zum "Cross Compiling" mit gcc



  • Hallo,

    Ich arbeite mit Codeblocks unter Ubuntu. Bisher hab ich nur für Linux kompiliert - problemlos.
    Ich schaffe es nicht, für Windows zu kompilieren. Der Code ist portabel.
    Also einige Fragen zum Verständnis:

    1. Ist nicht der einzig notwendige Unterschied gegenüber den Einstellungen für eine Linux-Zielplattform die Standard-Lib u. Plattformspzifische Bibliotheken (z.B. Winapi)?

    2. Wenn ich unter Codeblocks bei "Search directories" keine Header u. lib-Files angegeben habe, warum kann ich dann trotzdem Sachen problemlos kompilieren, die Headerdateien der Standardbibliothek einbinden?
    [Ich denke das kann nur heißen, dass das über irgendeine "Systemvariable" läuft. Richtig?]

    Hinweise helfen mir sehr!!



  • Sind das so schwierige Fragen? Kann mir niemand weiter helfen?



  • Nicht so ungeduldig.

    Samuel G. schrieb:

    2. Wenn ich unter Codeblocks bei "Search directories" keine Header u. lib-Files angegeben habe, warum kann ich dann trotzdem Sachen problemlos kompilieren, die Headerdateien der Standardbibliothek einbinden?

    Weil Du dem gcc auf der Commandline auch nicht Extra sagen musst, wo er seine Standardlibrary findet. Typischerweise sucht der einfach /usr/local/include, /usr/include und Co. ab.

    Zu Deiner Frage: Hast Du denn mal die Forensuche benutzt? Gegoogelt? Dazu gibts hier schon massig Threads. Weiters ist "ich schaff es nicht" eine äußerst ungenaue Angabe, erklär besser mal, was Du bis dato versucht hast und worin genau die Schwierigkeiten lagen.



  • Samuel G. schrieb:

    1. Ist nicht der einzig notwendige Unterschied gegenüber den Einstellungen für eine Linux-Zielplattform die Standard-Lib u. Plattformspzifische Bibliotheken (z.B. Winapi)?

    Nein, Linux und Windows haben zusätzlich auch ein unterschiedliches Dateiformat für Programme (ELF vs. PE). Aus irgendeinem Grund scheint das gcc Team nicht daran interessiert zu sein das direkt im gcc zu unterstützen. Mit MingW gibt es aber eine gcc Version die das tut. Die kannst du auch ganz einfach unter Ubuntu (mit dem Paketmanager) installieren, und wenn du dann statt gcc dann den mingw gcc wählst, brauchst du dir keine Gedanken mehr über die standard Libs machen.



  • Danke, das hat mir schon viel weiter geholfen. Ich habe nicht konkreter gefragt, weil ich erstmal die Problematik an sich verstehen wollte.

    Aber jetzt:

    Wie krieg ich mingw dazu mir eine .dll u. .lib auszuspucken? Unter codeblocks für Ubuntu gibt es dazu kein Project-Template.
    Reicht es wenn ich als Dateinamen für den Output File .dll statt .so angebe?
    Aber wie krieg ich ihn dazu mir auch eine .lib auszuspucken?
    Kann ich irgendwie ein Project Template für DLLs installieren/herstellen?



  • Ich hatte mich unklar ausgedrückt. Neuer Versuch:

    Unter Codeblocks für Ubuntu gibt es kein Projekt-Template für DLLs.
    Ich vermute man muss "Shared Library" wählen.
    Das habe ich gemacht, und bei Output Filename den Dateinamen auf .dll geändert (statt .so).
    Leider spuckt er mir keine .a Datei mit aus, sondern nur die .dll-Datei. Was muss ich einstellen, damit ich eine kriege?



  • Der gcc benutzt standardmäßig keine Importbibliothek. Man gibt beim Linken direkt die Shared Library an. Wenn du trotzdem eine haben willst, kannst du beim Linken der Shared Library dem Linker "--out-implib name.a" als Parameter mitgeben, damit er diese erstellt.



  • Danke für eure Hilfe.

    Inzwischen komme ich zurecht. Ich habe MinGW selbst kompiliert, um die neueste Version zu haben (das geht ja erstaunlich einfach!).
    Ich hab mir ein par Templates für Dynamische Bibliotheken gemacht.

    Grüße


Anmelden zum Antworten