Compilen für Windows unter Ubuntu



  • Tschuldigung vergessen 🙂

    Der Parameter müsste "--target=i386-mingw32" sein.

    Aber so nebenbei wenn du Codeblocks verwendest, dann gibt es hier vllt noch einen für dich interresannten Artikel: http://forums.codeblocks.org/index.php?topic=3343.0

    Mfg Marco



  • Cool, danke für den Link 🙂
    Nur noch eine Kleinigkeit: Wenn ich normalerweise mein Programm als Release compile hat es ca. 200kB, aber mit dem MinGW32 hat es plötzlich 800kB, obwohl ich alle Optimierungen an habe... Brauche ich für MinGW vielleicht andere Parameter zur Optimierung?



  • Hallo

    Gute Frage, aber das weiß ich leider auch nicht so genau. Die bessere frage wäre aber eher, wie groß wird es wenn du es unter Windows direkt übersetzt. Weil ich glaub die Optimieroptionen sind die selben.

    Mfg Marco



  • [MOP] schrieb:

    Cool, danke für den Link 🙂
    Nur noch eine Kleinigkeit: Wenn ich normalerweise mein Programm als Release compile hat es ca. 200kB, aber mit dem MinGW32 hat es plötzlich 800kB, obwohl ich alle Optimierungen an habe... Brauche ich für MinGW vielleicht andere Parameter zur Optimierung?

    Das ist genau einer der Gründe, warum für Windows meist der Visual C++-Compiler empfohlen wird. Wenn man mit einem neuen MinGW ein Programm, das lediglich <iostream> einbindet, übersetzt, ist es schon mindestens 470KB groß. Ich vermute mal, bei großen Projekten relativiert sich das dann auch, aber so schleppst du halt immer deutlich mehr mit rum.
    Helfen tut da nur noch UPX 🙂 .



  • Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ in das Forum Compiler- und IDE-Forum verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • wxSkip schrieb:

    [MOP] schrieb:

    Cool, danke für den Link 🙂
    Nur noch eine Kleinigkeit: Wenn ich normalerweise mein Programm als Release compile hat es ca. 200kB, aber mit dem MinGW32 hat es plötzlich 800kB, obwohl ich alle Optimierungen an habe... Brauche ich für MinGW vielleicht andere Parameter zur Optimierung?

    Das ist genau einer der Gründe, warum für Windows meist der Visual C++-Compiler empfohlen wird. Wenn man mit einem neuen MinGW ein Programm, das lediglich <iostream> einbindet, übersetzt, ist es schon mindestens 470KB groß. Ich vermute mal, bei großen Projekten relativiert sich das dann auch, aber so schleppst du halt immer deutlich mehr mit rum.
    Helfen tut da nur noch UPX 🙂 .

    Aja gut zu wissen, des dachte ich mir fast schon. Die Frage ist nur, ob das in der heutigen Zeit wirklich so schlimm ist. Ich arbeite eigentlich nur noch mit CodeBlocks und MinGW unter Windows. Des Einzige was mich irgendwie immer wieder stört ist, dass ich bei übersetzten Programmen die mingw-DLL mitgeben muss.

    Dieses UPX werde ich mir aber mal anschauen, erst recht da es scheint das alle Libs gleich mit eingebunden werden und das beim Verteilen doch recht angenehm ist ;-). Man lernt halt nie aus

    Mfg marco



  • Du kannst AFAIK mit UPX keine DLLs in deine EXE mit einpacken.
    Ich habe dazu mal ein Programm geschrieben, das mithilfe des GCC aus einer EXE-Datei und bspw. einer DLL (es geht auch mit anderen Dateien) ein Programm macht, das dann die beiden Dateien in das TMP-Verzeichnis extrahiert und die EXE dann ausführt. Es funktioniert allerdings nur für Windows, außerdem meldet AntiVir die erstellten Programme immer als Virus 😃



  • wxSkip schrieb:

    Du kannst AFAIK mit UPX keine DLLs in deine EXE mit einpacken.
    Ich habe dazu mal ein Programm geschrieben, das mithilfe des GCC aus einer EXE-Datei und bspw. einer DLL (es geht auch mit anderen Dateien) ein Programm macht, das dann die beiden Dateien in das TMP-Verzeichnis extrahiert und die EXE dann ausführt. Es funktioniert allerdings nur für Windows, außerdem meldet AntiVir die erstellten Programme immer als Virus 😃

    Achso, dann hab ich mich wohl doch auf der Wiki-Seite verlesen. Weil dort steht dies:

    Ein weiterer Vorteil von UPX besteht darin, komplette Verzeichnisse (z. B. Programm und zusätzliche Daten, Libraries, Ressourcen) in einer Datei zu bündeln, was z. B. automatische Updates oder die Verteilung in Firmennetzen übersichtlicher, sicherer und einfacher machen kann.

    Deswegen dachte ich kann man die komplett zusammenpacken.

    Mfg marco



  • Das hört sich auch ganz so an, als ob es doch ginge, ich hab bloß keine Option dafür gefunden. Werd's mir mal anschauen.

    mfg

    EDIT: Ah, ich hab den Satz jetzt auch bei Wikipedia gefunden 😉



  • wxSkip schrieb:

    ... EDIT: Ah, ich hab den Satz jetzt auch bei Wikipedia gefunden 😉

    Wenns mal wieder länger dauert 😉



  • 😃
    Hast du inzwischen herausgefunden, wie das geht? Würde mich auch mal interessieren.



  • Nein leider noch nicht, werds heute Abend wenn ich wieder daheim bin nochmal probieren.



  • Hy

    So habs jetzt nochmal über ne Stunde lang probiert und im Internet gesucht. Und nein es geht definitiv nicht mehrere Dateien in eine zu packen. Es soll zwar gehen irgendwelche zusätzliche Daten noch mit anzuhängen:

    --overlay=copy      copy any extra data attached to the file [default]
    
    Info: An "overlay" means auxillary data atached after the logical end of an executable, and it often contains application specific data (this is a common practice to avoid an extra data file, though it would be better to use resource sections).
    

    aber selbst das hab ich irgendwie nicht so ganz gefunden wie es gehen soll 😞

    Mfg marco



  • Marc-O schrieb:

    Des Einzige was mich irgendwie immer wieder stört ist, dass ich bei übersetzten Programmen die mingw-DLL mitgeben muss.

    Musst du nicht, jedenfalls nicht beim TDM MinGW und bei der Ubuntu-Version von MinGW ebenfalls nicht.
    Der Grund für die Binarygröße ist, dass bei MinGW die CRT statisch gelinkt wird. Wer keine der Streamklassen verwendet, muss diesen Preis allerdings nicht zahlen.

    UPX ist auch eine eher schlechte Idee, da einige Antiviren-Programme mehr oder weniger automatisch Alarm schlagen (Norton, Avast, AVG...), wenn ein Programm mit UPX gepackt ist. Die endlosen Anfragen von Nutzern, warum XXX das Programm denn als Trojaner einstufe, willst du dir nicht antun.



  • Athar schrieb:

    Marc-O schrieb:

    Des Einzige was mich irgendwie immer wieder stört ist, dass ich bei übersetzten Programmen die mingw-DLL mitgeben muss.

    Musst du nicht, jedenfalls nicht beim TDM MinGW.
    Der Grund für die Binarygröße ist, dass bei MinGW die CRT statisch gelinkt wird. Wer keine der Streamklassen verwendet, muss diesen Preis allerdings nicht zahlen.

    UPX ist auch eine eher schlechte Idee, da einige Antiviren-Programme mehr oder weniger automatisch Alarm schlagen (Norton, Avast, AVG...), wenn ein Programm mit UPX gepackt ist. Die endlosen Anfragen von Nutzern, warum XXX das Programm denn als Trojaner einstufe, willst du dir nicht antun.

    Die CRT wird zwar statisch gelinkt, dennoch produziert der VC++ auch mit statisch gelinkter CRT deutlich kleinere Binaries (z.B. bei einem meiner Projekte mit über 5000 Zeilen ca. 300 statt 720 KB).
    Zudem kannst du nicht einfach behaupten, dass er UPX nicht benutzen _will_. Wenn er sein Programm nur im kleineren Kreis verteilen will, kann er auch einfach darauf hinweisen.


Anmelden zum Antworten