clang++ Doesn't Select The Correct Include Directories When Cross-Compiling

Bug #1950808 reported by Connor Nolan
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
llvm-defaults (Ubuntu)
New
Undecided
Unassigned

Bug Description

## What Happens?

When cross-compiling with clang++, it isn't able to find the correct C++ headers and fails to compile. Meanwhile, arm-linux-gnueabihf-g++ compiles fine.

## Test Code

test.cpp:
> #include <string>
> #include <cstdio>
>
> int main() {
> std::string str = "Hello World!";
> printf("%s\n", str.c_str());
> }

## Compiling With GCC

$ 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

## Compiling With Clang

$ 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.

## GCC Include Directories

$ "$(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/9/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/9/../../../../arm-linux-gnueabihf/include/c++/9
 /usr/lib/gcc-cross/arm-linux-gnueabihf/9/../../../../arm-linux-gnueabihf/include/c++/9/arm-linux-gnueabihf
 /usr/lib/gcc-cross/arm-linux-gnueabihf/9/../../../../arm-linux-gnueabihf/include/c++/9/backward
 /usr/lib/gcc-cross/arm-linux-gnueabihf/9/include
 /usr/lib/gcc-cross/arm-linux-gnueabihf/9/../../../../arm-linux-gnueabihf/include
 /usr/include
End of search list.

## Clang Include Directories

$ clang++ -target arm-linux-gnueabihf -E -x c++ - -v < /dev/null
clang version 10.0.0-4ubuntu1
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/bin/../lib/gcc-cross/arm-linux-gnueabihf/9
Found candidate GCC installation: /usr/lib/gcc-cross/arm-linux-gnueabihf/10
Found candidate GCC installation: /usr/lib/gcc-cross/arm-linux-gnueabihf/9
Selected GCC installation: /usr/bin/../lib/gcc-cross/arm-linux-gnueabihf/10
Candidate multilib: .;@m32
Selected multilib: .;@m32
 (in-process)
 "/usr/lib/llvm-10/bin/clang" -cc1 -triple armv7-unknown-linux-gnueabihf -E -disable-free -disable-llvm-verifier -discard-value-names -main-file-name - -mrelocation-model static -mthread-model posix -mframe-pointer=all -fmath-errno -fno-rounding-math -masm-verbose -mconstructor-aliases -target-cpu generic -target-abi aapcs-linux -mfloat-abi hard -fallow-half-arguments-and-returns -dwarf-column-info -fno-split-dwarf-inlining -debugger-tuning=gdb -v -resource-dir /usr/lib/llvm-10/lib/clang/10.0.0 -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-gnueabi/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/c++/10/backward -internal-isystem /usr/local/include -internal-isystem /usr/lib/llvm-10/lib/clang/10.0.0/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -fdeprecated-macro -fdebug-compilation-dir /home/<User>/Documents/clang-bug -ferror-limit 19 -fmessage-length 0 -fno-signed-char -fgnuc-version=4.2.1 -fobjc-runtime=gcc -fcxx-exceptions -fexceptions -fdiagnostics-show-option -fcolor-diagnostics -faddrsig -o - -x c++ -
clang -cc1 version 10.0.0 based upon LLVM 10.0.0 default target x86_64-pc-linux-gnu
ignoring nonexistent directory "/usr/bin/../lib/gcc-cross/arm-linux-gnueabihf/10/../../../../include/arm-linux-gnueabi/c++/10"
ignoring nonexistent directory "/usr/bin/../lib/gcc-cross/arm-linux-gnueabihf/10/../../../../include/arm-linux-gnueabihf/c++/10"
#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-10/lib/clang/10.0.0/include
 /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

## System Information

$ lsb_release -rd
Description: Ubuntu 20.04.3 LTS
Release: 20.04

affects: llvm-defaults (Ubuntu) → clang (Ubuntu)
affects: clang (Ubuntu) → llvm-defaults (Ubuntu)
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.