Package: clang Version: 1:10.0-50~exp1 Severity: normal Dear Maintainer,
I'm trying to cross-compile C++ code for ARMHF, while this works fine with GCC, and C code works fine with Clang. When cross-compiling C++ code with Clang, it fails to select the correct include directories (for libstdc++). # Packages Used To Test * g++-arm-linux-gnueabihf (For testing GCC) * clang * ARMHF Development Libraries (Also Depended On By g++-arm-linux-gnueabihf) * libstdc++-10-dev-armhf-cross * libc6-dev-armhf-cross # Steps To Reproduce 1. Create test.cpp test.cpp: > #include <string> > #include <cstdio> > > int main() { > std::string str = "Hello World!"; > printf("%s\n", str.c_str()); > } 2. Compile With GCC (It Works!) $ arm-linux-gnueabihf-g++ -o test test.cpp $ echo $? 0 $ file test test: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, BuildID[sha1]=e0b6f7f2bec2ca44794a814775f6587aecaf3c5d, for GNU/Linux 3.2.0, not stripped 3. Compile With Clang (It Doesn't Work.) $ clang++ -target arm-linux-gnueabihf -o test test.cpp In file included from test.cpp:1: /usr/bin/../lib/gcc-cross/arm-linux- gnueabihf/10/../../../../include/c++/10/string:38:10: fatal error: 'bits/c++config.h' file not found #include <bits/c++config.h> ^~~~~~~~~~~~~~~~~~ 1 error generated. # More Info ## Include Directories Used By GCC $ "$(arm-linux-gnueabihf-gcc -print-prog-name=cc1plus)" -v -quiet -imultiarch arm-linux-gnueabihf < /dev/null ignoring nonexistent directory "/usr/local/include/arm-linux-gnueabihf" ignoring nonexistent directory "/usr/lib/gcc-cross/arm-linux- gnueabihf/10/include-fixed" ignoring nonexistent directory "/usr/include/arm-linux-gnueabihf" #include "..." search starts here: #include <...> search starts here: /usr/lib/gcc-cross/arm-linux-gnueabihf/10/../../../../arm-linux- gnueabihf/include/c++/10 /usr/lib/gcc-cross/arm-linux-gnueabihf/10/../../../../arm-linux- gnueabihf/include/c++/10/arm-linux-gnueabihf /usr/lib/gcc-cross/arm-linux-gnueabihf/10/../../../../arm-linux- gnueabihf/include/c++/10/backward /usr/lib/gcc-cross/arm-linux-gnueabihf/10/include /usr/lib/gcc-cross/arm-linux-gnueabihf/10/../../../../arm-linux- gnueabihf/include /usr/include End of search list. ## Include Directories Used By Clang $ clang++ -target arm-linux-gnueabihf -E -x c++ - -v < /dev/null Debian clang version 11.0.1-2 Target: arm-unknown-linux-gnueabihf Thread model: posix InstalledDir: /usr/bin Found candidate GCC installation: /usr/bin/../lib/gcc-cross/arm-linux- gnueabihf/10 Found candidate GCC installation: /usr/lib/gcc-cross/arm-linux-gnueabihf/10 Selected GCC installation: /usr/bin/../lib/gcc-cross/arm-linux-gnueabihf/10 Candidate multilib: .;@m32 Selected multilib: .;@m32 (in-process) "/usr/lib/llvm-11/bin/clang" -cc1 -triple armv7-unknown-linux-gnueabihf -E -disable-free -disable-llvm-verifier -discard-value-names -main-file-name - -mrelocation-model static -mframe-pointer=all -fmath-errno -fno-rounding-math -mconstructor-aliases -target-cpu generic -target-abi aapcs-linux -mfloat-abi hard -fallow-half-arguments-and-returns -fno-split-dwarf-inlining -debugger- tuning=gdb -v -resource-dir /usr/lib/llvm-11/lib/clang/11.0.1 -internal-isystem /usr/bin/../lib/gcc-cross/arm-linux-gnueabihf/10/../../../../include/c++/10 -internal-isystem /usr/bin/../lib/gcc-cross/arm-linux- gnueabihf/10/../../../../include/arm-linux-gnueabihf/c++/10 -internal-isystem /usr/bin/../lib/gcc-cross/arm-linux-gnueabihf/10/../../../../include/arm- unknown-linux-gnueabihf/c++/10 -internal-isystem /usr/bin/../lib/gcc-cross/arm- linux-gnueabihf/10/../../../../include/c++/10/backward -internal-isystem /usr/local/include -internal-isystem /usr/lib/llvm-11/lib/clang/11.0.1/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -fdeprecated-macro -fdebug-compilation-dir / -ferror-limit 19 -fno-signed-char -fgnuc-version=4.2.1 -fcxx-exceptions -fexceptions -fcolor-diagnostics -faddrsig -o - -x c++ - clang -cc1 version 11.0.1 based upon LLVM 11.0.1 default target x86_64-pc- linux-gnu ignoring nonexistent directory "/usr/bin/../lib/gcc-cross/arm-linux- gnueabihf/10/../../../../include/arm-linux-gnueabihf/c++/10" ignoring nonexistent directory "/usr/bin/../lib/gcc-cross/arm-linux- gnueabihf/10/../../../../include/arm-unknown-linux-gnueabihf/c++/10" ignoring nonexistent directory "/include" #include "..." search starts here: #include <...> search starts here: /usr/bin/../lib/gcc-cross/arm-linux-gnueabihf/10/../../../../include/c++/10 /usr/bin/../lib/gcc-cross/arm-linux- gnueabihf/10/../../../../include/c++/10/backward /usr/local/include /usr/lib/llvm-11/lib/clang/11.0.1/include /usr/include End of search list. # 1 "<stdin>" # 1 "<built-in>" 1 # 1 "<built-in>" 3 # 404 "<built-in>" 3 # 1 "<command line>" 1 # 1 "<built-in>" 2 # 1 "<stdin>" 2 # Historical Example Of Bug https://askubuntu.com/questions/947954/wrong-default-include-directories-for- clang-cross-compile (Note: Ubuntu Not Debian) # Systems Tested I've replicated this bug on both my native Ubuntu 20.04 and a Debian Bullseye Docker container. # Conclusion For now, I'm using a pretty hacky workaround to extract the GCC include directory list and feed it into Clang, but the script's quite volatile and it would be nice to have "-target" on Clang just work with C++ code. Any help would be greatly appreciated! Thank you! -- System Information: Debian Release: bullseye/sid APT prefers focal-updates APT policy: (500, 'focal-updates'), (500, 'focal-security'), (500, 'focal'), (100, 'focal-backports') Architecture: amd64 (x86_64) Foreign Architectures: i386 Kernel: Linux 5.13.0-30-generic (SMP w/8 CPU cores) Kernel taint flags: TAINT_CRAP, TAINT_OOT_MODULE, TAINT_UNSIGNED_MODULE Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), LANGUAGE=en_US.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /usr/bin/dash Init: systemd (via /run/systemd/system) LSM: AppArmor: enabled Versions of packages clang depends on: ii clang-10 1:10.0.0-4ubuntu1 clang recommends no packages. clang suggests no packages. -- no debconf information