GCC 16.1.0 und Modules



  • Es gibt nun eine spezielle Option, um das Standard Module zu übersetzen. Mit

    gcc std=c++26 -fmodules -c --compile-std-module
    

    macht der Compiler das nun selbst, so dass man nicht mehr wissen muss, wo der Compiler installiert wurde. Es wird zusätzlich auch ein std.compat Module übersetzt, dass die Deklarationen auch im globalen Namensraum definiert, so wie das mit den Header der Fall ist. Allerdings musste ich feststellen, dass nicht alle Bestandteile im Standard Module vorhanden sind. Dinge aus meta fehlen.



  • @john-0 sagte in GCC 16.1.0 und Modules:

    Dinge aus meta fehlen.

    Versuchs mal mit zusätzlich -freflection, das muss meines Wissens auch noch extra aktiviert werden wie die Module. Das hat jedenfalls nach einem Bugfix vor nem halben Jahr oder so im Entwicklungs-Branch funktioniert, nachdem sich Module und Reflection lange Zeit gebissen haben.



  • Ah, das war es. Vielen Dank für den Hinweis!



  • Das nächste Problem tritt bei mir auf. Wenn ich das Standard Module mit Reflection Support baue, dann scheitert bei mir das Include von „ncursesw/ncurses.h“ und er spuckt diese Fehlermeldung aus (gekürzt).

    Das Verrückte ist, lässt man die "-freflection" Option weg, übersetzt er das perfekt.

    Hat jemand einen Ansatzpunkt was man machen kann?

    g++-16 --std=c++26 -fmodules -freflection -DCXX_SYSTEM_IMPORT_STD=yes -c --compile-std-module
    mv *.o objs/.
    g++-16 -std=c++26 -O3 -Wpedantic -pedantic-errors -fno-gnu-keywords -Wall -Wextra -Wplacement-new=2 -Waligned-new -Wdouble-promotion -Winit-self -Wnoexcept -Wold-style-cast -fmodules -freflection -DCXX_SYSTEM_IMPORT_STD=yes -c src/ngui_core.cc -o objs/ngui_core.o
    In Datei, eingebunden von /usr/include/x86_64-linux-gnu/bits/types/mbstate_t.h:4,
                     von /usr/include/wchar.h:53,
                     von /opt/gcc-16.1.0/include/c++/16.1.0/cwchar:49,
                     von /opt/gcc-16.1.0/include/c++/16.1.0/bits/postypes.h:42,
                     von /opt/gcc-16.1.0/include/c++/16.1.0/bits/char_traits.h:44,
                     von /opt/gcc-16.1.0/include/c++/16.1.0/string:45,
                     von /opt/gcc-16.1.0/include/c++/16.1.0/bits/stdexcept_throw.h:57,
                     von /opt/gcc-16.1.0/include/c++/16.1.0/bitset:49,
                     von /opt/gcc-16.1.0/include/c++/16.1.0/x86_64-pc-linux-gnu/bits/stdc++.h:52,
    von Modul /opt/gcc-16.1.0/include/c++/16.1.0/x86_64-pc-linux-gnu/bits/stdc++.h, importiert bei /opt/gcc-16.1.0/include/c++/16.1.0/bits/std.cc:26,
    von Modul std, importiert bei src/ngui_core.cc:12:
    /usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h:21:3: Fehler: in Konflikt stehende Deklaration »typedef struct __mbstate_t __mbstate_t«
       21 | } __mbstate_t;
          |   ^~~~~~~~~~~
    In Datei, eingebunden von /usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h:5,
                     von /usr/include/stdio.h:40,
                     von /usr/include/curses.h:232,
                     von src/ngui_core.cc:7:
    /usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h:21:3: Anmerkung: bestehende Deklaration »typedef struct __mbstate_t __mbstate_t«
       21 | } __mbstate_t;
          |   ^~~~~~~~~~~
    In Datei, eingebunden von /usr/include/x86_64-linux-gnu/sys/types.h:227,
                     von /usr/include/stdlib.h:514,
                     von /opt/gcc-16.1.0/include/c++/16.1.0/cstdlib:83,
                     von /opt/gcc-16.1.0/include/c++/16.1.0/x86_64-pc-linux-gnu/bits/stdc++.h:39,
    von Modul /opt/gcc-16.1.0/include/c++/16.1.0/x86_64-pc-linux-gnu/bits/stdc++.h, importiert bei /opt/gcc-16.1.0/include/c++/16.1.0/bits/std.cc:26,
    von Modul std, importiert bei src/ngui_core.cc:12:
    /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:72:3: Fehler: in Konflikt stehende Deklaration »typedef union pthread_mutex_t pthread_mutex_t«
       72 | } pthread_mutex_t;
          |   ^~~~~~~~~~~~~~~
    In Datei, eingebunden von /usr/include/signal.h:375,
                     von src/ngui_core.cc:8:
    /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:72:3: Anmerkung: bestehende Deklaration »typedef union pthread_mutex_t pthread_mutex_t«
       72 | } pthread_mutex_t;
          |   ^~~~~~~~~~~~~~~
    …
    

Anmelden zum Antworten