blog.michalt.pl

GCC, moduły i C++ 20 - może czas przestać żartować?

27.02.2022 21:25 Tech

Dziś krótki wpis o moich przygodach z GCC i modułami. Bawiłem się dwoma wersjami kompilatorów i obie nie podołały budowaniu kodu. Pierwsza z nich, stabilna 11.2.0, druga to snapshot wersji 12 z 6 lutego. Ja już straciłem rachubę - w niektórych wersjach trzeba dodawać flagę -ts-modules, w niektórych nie.To znaczy, w niestabilnych buildach 11 kilka razy z tego wymagania rezygnowano. Może warto się wreszcie zdecydować? O ironio, aby móc budować kod w kompilatorze na 2022 rok w standardzie z 2020, nadal trzeba dodawać flagę -std=c++20. Ciekawe w którym roku standard stanie się domyślny... W 2030? Ale wracając do modułów...

To jest jakaś katastrofa... Kolejność bibliotek w linii polecenia kompilacji potrafi poskładać budowanie. Za pierwszym razem błąd informujący o nieskompilowanym module, ponowne odpalenie budowania i wszystko działa. Jak ustawisz biblioteki w kolejności hierarchicznej wszystko zadziała.

Gdy już się uporasz z błędem niedokompilowanych modułów można ruszać z pisaniem kodu w C. Tak, nic mi się nie pomyliło. Przy dorzucaniu niektórych komponentów STL kompilator zaczyna gubić podlinkowane zewnętrzne biblioteki - tak przynajmniej mi się wydaje. Krzyczy komunikatami undefined reference to nazwa funkcji lub metody lub błędem u zduplikowaniu komponentów z STL. Problem potrafił wystąpić nawet przy klasie string. Próbowałem to rozwiązać na milion sposobów i nic nie działa. Co ciekawe, snapshot GCC12 nie rzuca błędami z duplikacją implementacji tylko wali błędem internal compiler error oraz informację o możliwości zaraportowania błędu przy użyciu flagi -freport-bug . Co dziwne, jej dodanie wcale nie dodaje takiej możliwości, tylko po wystąpieniu błędu zwraca w komunikacie dodatkowy tekst z odnośnikiem do strony internetowej kompilatora oraz zachętę, aby przy jej pomocy zgłosić błąd.



Obsługa modułów w GCC jest niedziałającą atrapą. Nie da się tym kompilatorem zbudować poważnego modularnego projektu. No cóż, pozostaje mi przepisać nowy projekt do wersji niemodularnej. Szkoda. :( To wszystko w tej pełnej narzekania nocie. Do przeczytania. :)