<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/72753>72753</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [clang] libc++ lib dir not added to search dirs in Debian distributions
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang,
            libc++
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          jdoubleu
      </td>
    </tr>
</table>

<pre>
    _NOTE: This might only apply to the binaries included in the Debian apt packages._

When installing clang (17) through the Debian apt packages, clang picks GCC's `libstdc++` by default. One can manually add `-stdlib=libc++` to link against LLVM's `libc++`. Some newer C++ (23) features [require the `-fexperimental-library` flag](https://libcxx.llvm.org/UsingLibcxx.html#enabling-experimental-c-library-features).

However, clang fails to build (link) any programs linking again `libc++` and using `-fexperimental-library` , because it cannot find `libc++experimental`. That is because clang doesn't include the lib dir of `libc++`, which is at `/usr/lib/llvm-17/lib` (provided by the `libc++-17-dev` apt package).
```sh
$ dpkg -L libc++-17-dev | grep c++experimental
/usr/lib/llvm-17/lib/libc++experimental.a

$ clang++-17 -print-search-dirs
programs: =/usr/bin:/usr/lib/llvm-17/bin:/usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../x86_64-linux-gnu/bin
libraries: =/usr/lib/llvm-17/lib/clang/17:/usr/bin/../lib/gcc/x86_64-linux-gnu/12:/usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../lib64:/lib/x86_64-linux-gnu:/lib/../lib64:/usr/lib/x86_64-linux-gnu:/usr/lib/../lib64:/lib:/usr/lib
```

Try to run the following commands to build the C++ program:
```sh
$ cat <<CXX > test.cpp
#include <iostream>
#include <format>

int main()
{
        std::cout << std::format("Hello C++23\n");
}
CXX

$ clang++-17 -std=c++2b -stdlib=libc++ -fexperimental-library -v test.cpp
Debian clang version 17.0.4 (++20231031083102+309d55140c46-1~exp1~20231031083155.63)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/12
Selected GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/12
Candidate multilib: .;@m64
Selected multilib: .;@m64
 "/usr/lib/llvm-17/bin/clang" -cc1 -triple x86_64-pc-linux-gnu -emit-obj -mrelax-all -dumpdir a- -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name test.cpp -mrelocation-model pic -pic-level 2 -pic-is-pie -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -v -fcoverage-compilation-dir=/mnt/c/Users/jdoubleu/Downloads -resource-dir /usr/lib/llvm-17/lib/clang/17 -internal-isystem /usr/lib/llvm-17/bin/../include/c++/v1 -internal-isystem /usr/lib/llvm-17/lib/clang/17/include -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../x86_64-linux-gnu/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -std=c++2b -fdeprecated-macro -fdebug-compilation-dir=/mnt/c/Users/jdoubleu/Downloads -fexperimental-library -ferror-limit 19 -fgnuc-version=4.2.1 -fno-implicit-modules -fcxx-exceptions -fexceptions -fcolor-diagnostics -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /tmp/test-84b580.o -x c++ test.cpp
clang -cc1 version 17.0.4 based upon LLVM 17.0.4 default target x86_64-pc-linux-gnu
ignoring nonexistent directory "/usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../x86_64-linux-gnu/include"
ignoring nonexistent directory "/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/lib/llvm-17/bin/../include/c++/v1
 /usr/lib/llvm-17/lib/clang/17/include
 /usr/local/include
 /usr/include/x86_64-linux-gnu
 /usr/include
End of search list.
 "/usr/bin/ld" -pie --hash-style=gnu --build-id --eh-frame-hdr -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o a.out /lib/x86_64-linux-gnu/Scrt1.o /lib/x86_64-linux-gnu/crti.o /usr/bin/../lib/gcc/x86_64-linux-gnu/12/crtbeginS.o -L/usr/bin/../lib/gcc/x86_64-linux-gnu/12 -L/usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../lib64 -L/lib/x86_64-linux-gnu -L/lib/../lib64 -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib64 -L/lib -L/usr/lib /tmp/test-84b580.o -lc++ -lc++experimental -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/bin/../lib/gcc/x86_64-linux-gnu/12/crtendS.o /lib/x86_64-linux-gnu/crtn.o
/usr/bin/ld: cannot find -lc++experimental: No such file or directory
clang++-17: error: linker command failed with exit code 1 (use -v to see invocation)
```

## Workaround
In order to fix the build, I'd have to manually provide the `-L/usr/lib/llvm-17/lib` option.

I think that path should be included by default, shouldn't it?
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0GMtu47b2a5jNAQWL8nORRWLH7QDTFriZ284uoMgjiQ1F6pKU42z67Rek_IrtpNNpOwg8NnnePG_uvaoN4i2Z3JPJ6ob3obHu9ndp-1Jjf1Na-Xr79PMvXx5IcQdfGuWhVXUTwBr9Crzr9CsEC6FBKJXhTqEHZYTuJUpQJl2ssFTcAO8CdFw88xp99kRGKzK6Gz5_a9CAMj5wrZWpQWhuaiBsns8IW0BonO3r5j1ahC13GJ0Szx5-WC4Jm3kg05FWpQ9SEHYf_6YjKF9BYsV7HTL4xSAIbqDlpuc6aiNlRKI-SK1KUqy0Kk9wgwWtzDPwmkdZ4fPnX386YXSEzODRtggGX9DBcjiO2rAialMhD71DD2Ry7_B_vXKYNIucK9x26FSLJnBNtSodd6-Rd6V5TSYrwuZNCJ0nxR1ha8LWke92m2m9aTPrasLW__XK1J-H4ya0mrACDS-jXekb6mJPn-4lImyRnT7Lj_YFN-iO9q240j7aoeyVllGlaJCoFDev0DlbO976ZKX4jMlQF9YBbiT0UcqPVY5sSxS89wgqxJcyNkCljHxL8hQ_Gf9LwwMof0AeZJcWvSFsFvbumYyuVQlSObDVhZyR_0ujRBNp8QDpaN17N5g9fupNS6OLpt9J5Hnn7EZF3y9f9696pErzGZW4SUY4OvCJ2aej4c83uwM2Btk910A_wwUZILMl1A47uGaJHf4HAg_ec4ma8VMniCIkCx54A-2cMoF65E40VCrnB9C9A8RMQYrVgXmpzOCw12U5u44_2TrLDpC1EIStt_Pp03RMtTL9ltamJ2ydsz3g2ccV2Eg1CTl4mMILKa-baKf6Op99t4z_rG5aldPxQHMgcYF8cneOcarpdbxTiGv8zoDeuu2p33xxqTC4fqgBldXavqTkbtuWG3mSR-L9Pk3ufCjyeT8kRAzHYkmK5fLrVyDFAwT0IRNdt4cp9kFOiqWyPjiMNB-uXVfWtTwcL9OnMgFaHl9rTthidzO7H77A7p8PMspZ3Anb7wU6Hu7oRgLsR9Ta7nVkBZksDWEsUi7u98RXw5fl169_Fn6JxWoXuayEawULridWoJszW-0K6pAkN-i8sgbyWTbKxpCET0xGrMhHRT6aF_mIEXZfjBZyMsnHIzGe0vwP3Hb5H6dAk0k2LQ6W-8JdjSEG3M7pOnHidwNI45BLaK1EHQE769V2uPo0NAYoV8qloD2NpgSxtr2RsUJIJXnA2AHs2wkelDUXWN8cg4n8I2oUAeU_TXd5ELjtdVBDeEEWfWI8aqfjM-4fAUFypw8S7CGTMaBC5ECDU53Gaw8CFFsVqC1_B9o61HxLudZAZd92sVZyClQqz0uNtHKIQIVG7ij3gZZYWYe05OIZjTzCJWE26FSl0KVjwZ2kG657pIa36IHGeKOV0sPBwU0HIaxIFqfJQWKjB7RTgmrcoAY2_FCedgqBtpXjLdLOKhPQkWKVxK9aHhqKzhkLtKo6KqwJjotAipU1QCtjqYuOFDulCAu0Fdb44HoRrKNcK-6jnFVvXpSRNETNPClWDGhIHk5F10eL0ukYaOgNpoMaDboosMSyr2t08UqZmhSrWpYxImkl7AYdr5EK23Zq8K5YWYcC1ZoQHzB1d-g8Yet9f07YemVfjLZceqAOve2dwIgJ31zYgCY7Ga6p8q8-YPs-7omT71LoIFjqmdh6k_8VYhcV9kD0QypWcP1toP9OK3HJGLfxi7gU4GijczofY_91FleqQiWxcyh4QElbLpxNR2Vf_z0ne6euVOicdVSrVgXIF0Cr2vSC7ioKKVbjjGX5EGaq7bQSKsRo7nWKKbHdUtwK7KJQA5eTH8Jq66hUvDbWByXiGZfSeVUDXT09_bBcPv149-vD0-q3u_-s2dNy_enp7vEnUqxyoDYaK7Rd_EQf6HxcTuajzALd7jvns5o4FMOUJ88qYsk9Sug7a9L4tz_ezZQwpIH3q5yqjXWxCTLW4Fb5gCbE-QNjhnl9k8T_Vd-NjL5doHOk0_6JsSzyYjBMA-ADd8FDgw6PPdybfivCFw8fwf-N9PNnBN5POReYb9PM-fX7kf0eZDp-MDLOmjvltfIhu1LABzW1TNU6lTTacN9QH141xrIR8wdNzTNVEijFhg41r5EOaAuoq6dBLqDy1fBWJVd8xlQWhpY-MthJPZSszNuMxXDhWepn3x0U2PpRuJBn9kMY4YIaQL7LoYULJdbKPMZA_fxdVL4X76PJa6B5XenTu3OMjyavS4gr_M6A3s1p-jAA6CuzPVDdAtW1EE9--D_CnZ38jSdDIx__3C9MZs_2EwePL-7ebHquKhGBfrbge9FA7BfBumPOOsngh5EpIqTyFL_s4mA3hqadFkp4UaEB3KoAwkqEPM4-vcc0L1nwiKDMZteEHifCa4MvYQVhBfxm3TNP_eR-igHrJLpIrlLbYWMaI5iwJXwibCah4RuM14eF5G6ZdFgPnrvJxQLKpor5Zon3CUKjzDOEhgfoYlvrG9trCSUeF7XHtWiUZgDYLcsCKdY38raQi2LBb_A2n41GBZtNWX7T3OJkuhjxajaa5cV4xuV8MRuVs3w6XyzmuBCLG3WbpsI8n-cRJM9mYir4Yl7khZjMClaQ8QhbrvRhhXmjvO_xdsZmk-JG8xK1T7tpxvYDDGFLwtjJro4xMlnduNtkjrKvPRmPYmr1R6JBBZ123AORyepknXZYAkav4zLaIz15StFSOQ_K7PfOUvngVNmnxuSmd_r27T62VqHpy0zYdvc8-1fqnP0dReywkn6xvUoq_j8AAP__0nVHmg">