2

I am trying to build Qt 6.8.2 with g++ 15 and std standard c++23. This is my configuration command:

$ export GCC_CC=/usr/bin/gcc-15 \
    GCC_CXX=/usr/bin/g++-15 \
    GCC_CFLAGS="-O2 -fPIC" \
    GCC_CXXFLAGS="-O2 -fPIC -std=c++23" \
    GCC_LDFLAGS=""


$ CC=${GCC_CC} \
CXX=${GCC_CXX} \
CFLAGS="${GCC_CCFLAGS}" \
CXXFLAGS="-O2 -fPIC -fcommon ${GCC_CXXFLAGS}" \
LDFLAGS=${GCC_LDFLAGS} \
/build/deps_sources/qt-everywhere-src-6.8.2/configure FEATURE_clang=OFF -release -opensource -confirm-license \
       -prefix "/build/deps/qt6" \
       -skip qtwebengine \
       -skip qtimageformats \
       -skip qtimageformats \
       -skip qtquicktimeline \
       -skip qtquick3d \
       -skip qtmultimedia \
       -skip qt5compat \
       -skip qtactiveqt \
       -skip qtcharts \
       -skip qtcoap \
       -skip qtdatavis3d \
       -skip qtgraphs \
       -skip qtserialport \
       -skip qtpositioning \
       -skip qtlocation \
       -skip qtdoc \
       -skip qtgrpc \
       -skip qtlottie \
       -skip qtopcua \
       -skip qtquick3dphysics \
       -skip qtquickeffectmaker \
       -skip qtremoteobjects \
       -skip qtscxml \
       -skip qtsensors \
       -skip qtserialbus \
       -skip qtspeech \
       -skip qtvirtualkeyboard \
       -skip qtwebview -- \
       -DCMAKE_CXX_STANDARD=23 \
       -DCMAKE_CXX_STANDARD_REQUIRED=ON \
       -DCMAKE_CXX_EXTENSIONS=OFF \
       -DCMAKE_WARN_DEPRECATED=FALSE \
       -DCMAKE_SUPPRESS_DEVELOPER_WARNINGS=TRUE

For some reason it fails like this:

/usr/bin/g++-15 -DGLSLANG_OSINCLUDE_UNIX -DQT_EXPLICIT_QFILE_CONSTRUCTION_FROM_PATH -DQT_NO_DEBUG -DQT_NO_EXCEPTIONS -DQT_NO_FOREACH -DQT_NO_JAVA_STYLE_ITERATORS -DQT_NO_NARROWING_CONVERSIONS_IN_CONNECT -DQT_NO_QASCONST -DQT_NO_QEXCHANGE -DQT_NO_QSNPRINTF -DQT_USE_QSTRINGBUILDER -D_GLIBCXX_ASSERTIONS -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -I/build/qtshadertools/src/glslang/BundledGlslang_Spirv_autogen/include -I/build/deps_sources/qt-everywhere-src-6.8.2/qtshadertools/src/glslang/../3rdparty/glslang -I/build/deps_sources/qt-everywhere-src-6.8.2/qtbase/mkspecs/linux-g++ -I/build/qtbase/include -O2 -fPIC -fcommon -O2 -fPIC -std=c++23 -DNDEBUG -O2 -std=c++17 -fPIC -fvisibility=hidden -fvisibility-inlines-hidden -w -fno-exceptions -U_FORTIFY_SOURCE -Wsuggest-override -fcf-protection=full -D_FORTIFY_SOURCE=3 -ftrivial-auto-var-init=pattern -fstack-protector-strong -fstack-clash-protection -MD -MT qtshadertools/src/glslang/CMakeFiles/BundledGlslang_Spirv.dir/__/3rdparty/glslang/SPIRV/GlslangToSpv.cpp.o -MF qtshadertools/src/glslang/CMakeFiles/BundledGlslang_Spirv.dir/__/3rdparty/glslang/SPIRV/GlslangToSpv.cpp.o.d -o qtshadertools/src/glslang/CMakeFiles/BundledGlslang_Spirv.dir/__/3rdparty/glslang/SPIRV/GlslangToSpv.cpp.o -c /build/deps_sources/qt-everywhere-src-6.8.2/qtshadertools/src/3rdparty/glslang/SPIRV/GlslangToSpv.cpp
96.27 In file included from /build/deps_sources/qt-everywhere-src-6.8.2/qtshadertools/src/3rdparty/glslang/SPIRV/GlslangToSpv.cpp:45:
96.27 /build/deps_sources/qt-everywhere-src-6.8.2/qtshadertools/src/3rdparty/glslang/SPIRV/SpvBuilder.h:247:30: error: 'uint32_t' has not been declared
96.27   247 |     Id makeDebugLexicalBlock(uint32_t line);
96.27       |                              ^~~~~~~~
96.27 /build/deps_sources/qt-everywhere-src-6.8.2/qtshadertools/src/3rdparty/glslang/SPIRV/SpvBuilder.h:64:1: note: 'uint32_t' is defined in header '<cstdint>'; this is probably fixable by adding '#include <cstdint>'
96.27    63 | #include <stack>
96.27   +++ |+#include <cstdint>
96.27    64 | #include <unordered_map>
96.27 /build/deps_sources/qt-everywhere-src-6.8.2/qtshadertools/src/3rdparty/glslang/SPIRV/SpvBuilder.h:444:28: error: 'uint32_t' has not been declared
96.27   444 |     void enterLexicalBlock(uint32_t line);
96.27       |                            ^~~~~~~~
96.27 /build/deps_sources/qt-everywhere-src-6.8.2/qtshadertools/src/3rdparty/glslang/SPIRV/SpvBuilder.h:444:28: note: 'uint32_t' is defined in header '<cstdint>'; this is probably fixable by adding '#include <cstdint>'

Notice that -std=c++17 has been added by the build system behind my back. And indeed if I run the compile command again removing -std=c++17 it compiles without a problem.

Does anyone have a clue why the extra -std=c++17 is being added by the build system, and how to prevent it?

2
  • You can't remove C++17 while building glslang, because glslang/CMakeLists.txt resets the values set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON). Commented Sep 3 at 23:15
  • That is not the case on 6.8.2: ``` find -type f | grep -E "/glslang/CMakeLists.txt" | xargs grep CMAKE_CXX_STANDARD ``` No results Commented Sep 4 at 8:44

1 Answer 1

1

The version of the GLSLang code included in Qt 6.8.2 does not contain the upstream fix for this issue:

https://github.com/KhronosGroup/glslang/commit/e40c14a3e007fac0e4f2e4164fdf14d1712355bd

This fix seems to be included in Qt 6.8.3:

https://github.com/qt/qtshadertools/commit/244f7f62378eeb4a77ec69a71737ffe90c9d787d

So the solution to your problem is to use Qt 6.8.3.

Note there's no a priori reason to "build Qt with std=c++23", building your own code with that against a "normal" Qt build will work just fine.


As @3CEZVQ mentioned in a comment, glslang is an external project used by parts of Qt (namely their shader tools) and it is C++17.

Your Answer

By clicking β€œPost Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.