MinGWs Zukunft?



  • Mr X schrieb:

    Und zum Thema Standardkonformität (wobei ich nicht völlig sicher bin, das der Standard es erlaubt, in jedem Fall bringt es den Nutzer dazu, gefährlich zu programmieren): MinGW in Version 4.4 (PrettyOS-Crosscompiler, dort habe ich das festgestellt) erlaubt es dem Nutzer, Variablen in Headern zu definieren und gibt keine Linkerfehler, auch wenn der Header in mehrere C-Dateien eingebunden wird. Er interpretiert das zudem als _eine_ Variable. Daraus folgere ich weiter ... blabla

    Ich weiss jetzt natürlich nicht, ob es standardkonform ist oder nicht... Aber es gibt ja einen Unterschied zwischen einer Variablendeklaration und einer Variablendefinition. Bist Du sicher, Du hast eine Variable definitiert (mit Initialisierungswert)?
    Ich vermute, Du meinst eher die Variablendeklaration (Variable deklariert ohne Initialisierungswert). Auf diese Weise erscheint die Variable in den betroffenen Objektdateien als "common symbol" und das Verhalten des GNU Linkers ld (und der anderen 😕 ) damit ist http://sourceware.org/binutils/docs/as/Comm.html#Comm

    ... When linking, a common symbol in one object file may be merged with a defined or common symbol of the same name in another object file. If ld does not see a definition for the symbol – just one or more common symbols – then it will allocate length bytes of uninitialized memory. ...



  • abc.w schrieb:

    Mr X schrieb:

    Und zum Thema Standardkonformität (wobei ich nicht völlig sicher bin, das der Standard es erlaubt, in jedem Fall bringt es den Nutzer dazu, gefährlich zu programmieren): MinGW in Version 4.4 (PrettyOS-Crosscompiler, dort habe ich das festgestellt) erlaubt es dem Nutzer, Variablen in Headern zu definieren und gibt keine Linkerfehler, auch wenn der Header in mehrere C-Dateien eingebunden wird. Er interpretiert das zudem als _eine_ Variable. Daraus folgere ich weiter ... blabla

    Ich weiss jetzt natürlich nicht, ob es standardkonform ist oder nicht... Aber es gibt ja einen Unterschied zwischen einer Variablendeklaration und einer Variablendefinition. Bist Du sicher, Du hast eine Variable definitiert (mit Initialisierungswert)?
    Ich vermute, Du meinst eher die Variablendeklaration (Variable deklariert ohne Initialisierungswert). Auf diese Weise erscheint die Variable in den betroffenen Objektdateien als "common symbol" und das Verhalten des GNU Linkers ld (und der anderen 😕 ) damit ist http://sourceware.org/binutils/docs/as/Comm.html#Comm

    ... When linking, a common symbol in one object file may be merged with a defined or common symbol of the same name in another object file. If ld does not see a definition for the symbol – just one or more common symbols – then it will allocate length bytes of uninitialized memory. ...

    Das war aber ein großer Haufen.
    Ja, ich bin sicher.
    Auch ohne Initialisierungswert ist es eine Definition.



  • Mir fallen Variadic Templates als Vorteil von MinGW ein. Hatte zuerst mit MinGW programmiert und dann kam das böse Erwachen als ich den Code mit Visual C++ 2010 kompilieren wollte und feststellen, dass er Variadic Templates nicht unterstützt.



  • volkard schrieb:

    abc.w schrieb:

    bla blu furz

    Das war aber ein großer Haufen. ...

    Ein Haufen von mir 😕
    Kann nicht sein 😉



  • Variadic Templates schrieb:

    Mir fallen Variadic Templates als Vorteil von MinGW ein. Hatte zuerst mit MinGW programmiert und dann kam das böse Erwachen als ich den Code mit Visual C++ 2010 kompilieren wollte und feststellen, dass er Variadic Templates nicht unterstützt.

    Keine Schande. Denn der C++0x ist noch nicht draußen.



  • abc.w schrieb:

    ... und das Verhalten des GNU Linkers ld (und der anderen 😕 ) ...

    Ist jetzt Haarspalterei, aber das Verhalten des MS Linkers ist das gleiche. Habs einmal mit mingw und einmal mit MSVS 2008 Express Edition getestet.

    header.h

    #if 1
    int a;    /* No linker errors */
    #else
    int a = 0;    /* Linker reports error */
    #endif
    

    a.c

    #include "header.h"
    
    void a_set(void)
    {
        a = 1;
    }
    
    int a_get(void)
    {
        return a;
    }
    

    b.c

    #include "header.h"
    
    void b_set(void)
    {
        a = 2;
    }
    
    int b_get(void)
    {
        return a;
    }
    

    main.c

    #include <stdio.h>
    #include "header.h"
    
    extern void a_set(void);
    extern int a_get(void);
    extern void b_set(void);
    extern int b_get(void);
    
    int main(int argc, char* argv[])
    {
        argc = argc;
        argv = argv;
    
        a = 3;
        printf("a = %d, a_get = %d, b_get = %d\n", a, a_get(), b_get());
    
        return 0;
    }
    

    Makefile für mingw:

    CC = mingw32-gcc
    WARN = -Wall -Wextra -pedantic -Werror
    
    all:
    	$(CC) -c a.c -o a.o $(WARN)
    	$(CC) -c b.c -o b.o $(WARN)
    	$(CC) -c main.c -o main.o $(WARN)
    	$(CC) a.o b.o main.o -o main $(WARN)
    

    mingw32-gcc.exe (GCC) 3.4.5 (mingw-vista special r3)



  • Artchi schrieb:

    Variadic Templates schrieb:

    Mir fallen Variadic Templates als Vorteil von MinGW ein. Hatte zuerst mit MinGW programmiert und dann kam das böse Erwachen als ich den Code mit Visual C++ 2010 kompilieren wollte und feststellen, dass er Variadic Templates nicht unterstützt.

    Keine Schande. Denn der C++0x ist noch nicht draußen.

    Aber Variadic Templates sind sehr nützlich, auch wenn C++0x noch nicht draußen ist. Auch auto und decltype verwende ich oft.

    Ich wollte halt nur ein Beispiel nennen, wo MinGW VC++ was voraus hat.



  • Verbessert mich wenn ich falsch liege, aber das einzige was in diesem Thread als Nachteil des MinGW genannt wurde ist das fehlende GDI+ . Was habt ihr also gegen MinGW?



  • /rant/ schrieb:

    MinGW ist tot. Seit langem.
    Wenn du mir einen brauchbaren GCC für Windows x64 gibst, den man nicht vorher noch Tage lang konfigurieren muss, bevor man damit ein "Hallo Welt"-Programm kompilieren kann, bekommt der GCC bei mir vielleicht eine Chance. Ansonsten ist und bleibt GCC unter Windows für mich eine umsonst hoch gelobte Vaporware.

    Desweiteren verstehe ich nicht, warum der Standard C++ Support beim GCC "deutlich" besser sein soll als beim Visual C++. Hast du diese Aussage auf Visual C++ 2010 bezogen? Gibt es eine aktuelle Liste, wo diese Unterschiede festgehalten sind? Das würde mich sehr interessieren...

    Eine Entwicklungsumgebung mit GCC für Windows x64 gibt es z.B. hier:

    http://www.gordon-taft.net/SciencePack.html



  • player424 schrieb:

    Verbessert mich wenn ich falsch liege, aber das einzige was in diesem Thread als Nachteil des MinGW genannt wurde ist das fehlende GDI+ . Was habt ihr also gegen MinGW?

    Das er mangelhaft weiterentwickelt wird, weil es keine stabilen aktuellen Releases gibt, mühsam zu installieren ist, (problematische Programme wie MSYS enthält) und die Binaries offensichtlich unnötig groß sind (VC++ generiert wesentlich kleinere, auch wenn man die Standardlib statisch linkt)



  • Nun gut da magst du recht haben. Als ich neulich die Wxwidgets samples kompilieren wollte, ist er bei einem Beispiel mit einem Segmentation fault abgeschmiert.
    Ich denke aber der Compiler ist so beliebt, weil er etwas konkurrenzlos da steht. Ich meine sucht mal bei Google nach einem kostenlosen Kommandozeilencompiler. Alles worauf ihr stossen werdet ist der Borland 5.5, der leider etwas in die Jahre gekommen ist, oder die anderen Mitbewerber wie Watcom oder Digital Mars. Doch welche Bibliothek unterstützt diese Compiler schon? Höchstens der Watcom wird noch unterstützt aber der soll nicht so toll sein.
    Und für Digital Mars hab ich noch bei keiner Bibliothek die ich mal benutzt habe entsprechende Makefiles gefunden (ausser wxwidgets 😉 ).

    Zumindest das Problem mit der Installation kann man umgehen. Nämlich indem man den TDM-GCC Installer benutzt 🙂



  • player424 schrieb:

    Verbessert mich wenn ich falsch liege, aber das einzige was in diesem Thread als Nachteil des MinGW genannt wurde ist das fehlende GDI+ . Was habt ihr also gegen MinGW?

    Wer sich Windows-Compiler schimpft, sollte auch Windows-API unterstützen. Eigentlich eine ganz einfache Sache, oder?



  • player424 schrieb:

    Nun gut da magst du recht haben. Als ich neulich die Wxwidgets samples kompilieren wollte, ist er bei einem Beispiel mit einem Segmentation fault abgeschmiert.
    Ich denke aber der Compiler ist so beliebt, weil er etwas konkurrenzlos da steht. Ich meine sucht mal bei Google nach einem kostenlosen Kommandozeilencompiler. Alles worauf ihr stossen werdet ist der Borland 5.5, der leider etwas in die Jahre gekommen ist, oder die anderen Mitbewerber wie Watcom oder Digital Mars. Doch welche Bibliothek unterstützt diese Compiler schon? Höchstens der Watcom wird noch unterstützt aber der soll nicht so toll sein.
    Und für Digital Mars hab ich noch bei keiner Bibliothek die ich mal benutzt habe entsprechende Makefiles gefunden (ausser wxwidgets 😉 ).

    Zumindest das Problem mit der Installation kann man umgehen. Nämlich indem man den TDM-GCC Installer benutzt 🙂

    MSVC lässt sich auch über die Kommandozeile nutzen.



  • Wieso nimmst du nicht den Visual C++ Compiler mitgeliefert bei jedem Windows SDK (IMO entspricht der Professional Version ohne PGO)?



  • Das mag sein, aber man muss trotzdem die riesige IDE installieren 😉



  • Wieso? CodeBlocks arbeitet mit dem Compiler zusammen.



  • Nein muss man nicht. Der Compiler ist im Windows SDK drin.


  • Administrator

    player424 schrieb:

    Das mag sein, aber man muss trotzdem die riesige IDE installieren 😉

    Siehe Antwort von Zeus & Mr X, zudem wurde auch schon weiter vorne erwähnt, dass man auch den Debugger kostenlos ohne IDE bekommt.

    Zum MinGW, bzw. GCC auf Windows:
    Was ist eigentlich mit dem Kompiler von TDM? Die haben auch x64 Unterstützung.
    http://tdm-gcc.tdragon.net/

    Dazu einen Installer für eine angenehme Installation. Sind allerdings halt auch von MinGW und MSYS abhängig, daher wohl in Sachen GDI+ nicht viel besser. Aber immerhin ist die Installation deutlich einfacher 🙂
    Wenn ich den GCC auf Windows verwende, dann immer den von TDM.

    Grüssli



  • So wie beim gcc die Abhängigkeiten alles eigenständige Projekte sind, so werden halt bei MinGW die Abhängigkeiten alle separat geportet und angeboten. Wen das stört kann halt auf TDM oder ähnliches zurückgreifen, die den gcc + Abhängigkeiten in ein Archiv statt mehrere packen. MSYS hat mit MinGW auch gar nichts zu tun, auch wenn es in solchen Paketen gerne zusammen angeboten wird.

    Veraltet ist MinGW mit Version 4.5.0 von April diesen Jahres auch nicht. Der aktuelle gcc 4.5.1 ist erst 13 Tage alt, das sollte zu verkraften sein.



  • Na klar ist der GCC der Compiler wenn es um Ports nach Linux oder Crosscompiling geht. VS ist nur was für Windows für alles andere gibt es den GCC oder Intel oder sonst was.


Anmelden zum Antworten