I built Qt qttools 6.8.2 from source on Ubuntu 24.04.2 LTS. I previously built qtbase and qtdeclarative in /home/trung/qt6
and LLVM in /home/trung/.apps/llvm
. Clang is required for qdoc according to https://doc.qt.io/qt-6/qdoc-guide-clang.html, so I built qttools with these commands:
$cmake .. -DLLVM_INSTALL_DIR=/home/trung/.apps/llvm -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=/home/trung/qt6 -G Ninja
$ninja -j 4
$ninja install
I then checked which libraries the resulting qdoc
executable links to:
$cd /home/trung/qt6/bin
$ldd ./qdoc
linux-vdso.so.1 (0x00007e48aaab6000)
libQt6Qml.so.6 => /home/trung/qt6/bin/./../lib/libQt6Qml.so.6 (0x00007e48aa400000)
libQt6Core.so.6 => /home/trung/qt6/bin/./../lib/libQt6Core.so.6 (0x00007e48a9c00000)
libclang.so.19.1 => /home/trung/.apps/llvm/lib/libclang.so.19.1 (0x00007e48a1600000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007e48aaa81000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007e48a1200000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007e48aa317000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007e48aaa51000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007e48a0e00000)
/lib64/ld-linux-x86-64.so.2 (0x00007e48aaab8000)
libQt6Network.so.6 => /home/trung/qt6/bin/./../lib/libQt6Network.so.6 (0x00007e48a0a00000)
libicui18n.so.74 => /lib/x86_64-linux-gnu/libicui18n.so.74 (0x00007e48a0600000)
libicuuc.so.74 => /lib/x86_64-linux-gnu/libicuuc.so.74 (0x00007e48a0200000)
libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007e48a14b7000)
libpcre2-16.so.0 => /lib/x86_64-linux-gnu/libpcre2-16.so.0 (0x00007e48aa28b000)
libzstd.so.1 => /lib/x86_64-linux-gnu/libzstd.so.1 (0x00007e48a1146000)
libbrotlidec.so.1 => /lib/x86_64-linux-gnu/libbrotlidec.so.1 (0x00007e48aa27d000)
libcrypto.so.3 => /lib/x86_64-linux-gnu/libcrypto.so.3 (0x00007e489fc00000)
libicudata.so.74 => /lib/x86_64-linux-gnu/libicudata.so.74 (0x00007e489de00000)
libpcre2-8.so.0 => /lib/x86_64-linux-gnu/libpcre2-8.so.0 (0x00007e48a10ac000)
libbrotlicommon.so.1 => /lib/x86_64-linux-gnu/libbrotlicommon.so.1 (0x00007e48a9bdd000)
As you see in line 4 of the output, qdoc
is linked with clang.
But, when I use the Qt installer to download a prebuilt executable and check it with ldd
, it shows:
$ldd ./qdoc
linux-vdso.so.1 (0x00007606bf331000)
libQt6Qml.so.6 => /home/trung/.apps/qt6/6.8.2/gcc_64/bin/./../lib/libQt6Qml.so.6 (0x00007606bec00000)
libQt6Network.so.6 => /home/trung/.apps/qt6/6.8.2/gcc_64/bin/./../lib/libQt6Network.so.6 (0x00007606be800000)
libQt6Core.so.6 => /home/trung/.apps/qt6/6.8.2/gcc_64/bin/./../lib/libQt6Core.so.6 (0x00007606be000000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007606bf313000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007606bf30e000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007606bf307000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007606bdc00000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007606beb17000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007606bf2d9000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007606bd800000)
/lib64/ld-linux-x86-64.so.2 (0x00007606bf333000)
libzstd.so.1 => /lib/x86_64-linux-gnu/libzstd.so.1 (0x00007606bea5d000)
libgssapi_krb5.so.2 => /lib/x86_64-linux-gnu/libgssapi_krb5.so.2 (0x00007606bf283000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007606bf267000)
libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007606bf254000)
libicui18n.so.73 => /home/trung/.apps/qt6/6.8.2/gcc_64/bin/./../lib/libicui18n.so.73 (0x00007606bd400000)
libicuuc.so.73 => /home/trung/.apps/qt6/6.8.2/gcc_64/bin/./../lib/libicuuc.so.73 (0x00007606bd000000)
libicudata.so.73 => /home/trung/.apps/qt6/6.8.2/gcc_64/bin/./../lib/libicudata.so.73 (0x00007606bb000000)
libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007606bdeb7000)
libgthread-2.0.so.0 => /lib/x86_64-linux-gnu/libgthread-2.0.so.0 (0x00007606bea58000)
libkrb5.so.3 => /lib/x86_64-linux-gnu/libkrb5.so.3 (0x00007606be737000)
libk5crypto.so.3 => /lib/x86_64-linux-gnu/libk5crypto.so.3 (0x00007606bea2a000)
libcom_err.so.2 => /lib/x86_64-linux-gnu/libcom_err.so.2 (0x00007606bea24000)
libkrb5support.so.0 => /lib/x86_64-linux-gnu/libkrb5support.so.0 (0x00007606bea17000)
libpcre2-8.so.0 => /lib/x86_64-linux-gnu/libpcre2-8.so.0 (0x00007606bdb66000)
libkeyutils.so.1 => /lib/x86_64-linux-gnu/libkeyutils.so.1 (0x00007606be730000)
In the ldd
output above, there is no link to clang. Why is that? Is the prebuilt qdoc
somehow not using clang?
The prebuilt qdoc
uses the Clang library (libclang
), but it is statically linked, so ldd
does not show it. The instructions you linked to hint at this with "These let you link LLVM/Clang libraries statically". The documentation doesn't explain precisely why those executables use static linking, but one might surmise it simplifies packaging and distribution.
Meanwhile, evidently the default behavior of the Qt build process is to use dynamic linking, so that is what you get when building from source.
In both cases, libclang
is required to build qdoc
, and is used by it at run time.