Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Clang fails to find 32-bit C++ system headers on Ubuntu 13.10 #19663

Closed
eugenis opened this issue Mar 31, 2014 · 7 comments
Closed

Clang fails to find 32-bit C++ system headers on Ubuntu 13.10 #19663

eugenis opened this issue Mar 31, 2014 · 7 comments
Labels
bugzilla Issues migrated from bugzilla clang:driver 'clang' and 'clang++' user-facing binaries. Not 'clang-cl'

Comments

@eugenis
Copy link
Contributor

eugenis commented Mar 31, 2014

Bugzilla Link 19289
Resolution FIXED
Resolved on Aug 27, 2014 03:46
Version trunk
OS Linux
CC @chandlerc

Extended Description

Again, C++ system header path has changed.
Ubuntu 13.10 x86_64 has:

/usr/include/i386-linux-gnu
/usr/include/x86_64-linux-gnu
/usr/lib/i386-linux-gnu
/usr/lib/x86_64-linux-gnu

but

/usr/lib/gcc/i686-linux-gnu
/usr/lib/gcc/x86_64-linux-gnu

clang++ -m32 test.cc fails to find bits/c++config.h

@llvmbot
Copy link
Collaborator

llvmbot commented Apr 1, 2014

Try to solve this bug as a fresh man to LLVM/Clang.

@llvmbot
Copy link
Collaborator

llvmbot commented Apr 1, 2014

change the status to assigned.

@llvmbot
Copy link
Collaborator

llvmbot commented Apr 5, 2014

Again, C++ system header path has changed.
Ubuntu 13.10 x86_64 has:

/usr/include/i386-linux-gnu
/usr/include/x86_64-linux-gnu
/usr/lib/i386-linux-gnu
/usr/lib/x86_64-linux-gnu

but

/usr/lib/gcc/i686-linux-gnu
/usr/lib/gcc/x86_64-linux-gnu

clang++ -m32 test.cc fails to find bits/c++config.h

Can not reproduce your problem.
$ uname -a
Linux lingkun-ThinkPad-X200 3.11.0-19-generic #​33-Ubuntu SMP Tue Mar 11 18:48:34 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

$ llvm-config --version
3.5.0svn

$ llvm-config --build-mode
Debug+Asserts

$ llvm-config --cxxflags
-I/home/lingkun/local_install/include -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -std=c++11 -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -ffunction-sections -fdata-sections -Wcast-qual

$ llvm-config --targets-built
X86 Sparc PowerPC AArch64 ARM ARM64 Mips XCore MSP430 CppBackend NVPTX Hexagon SystemZ R600

Did your Ubuntu have multilib installed?

@eugenis
Copy link
Contributor Author

eugenis commented Apr 11, 2014

I think I might have installed some :i386 packages which brought /usr/include/i386-linux-gnu headers with them, and that confused the clang driver.

I can't reproduce it on another 13.10 machine. I'll get access to the first machine later today and update the bug.

@eugenis
Copy link
Contributor Author

eugenis commented Apr 13, 2014

So, I do have multilib installed, but I also have an :i386 gcc toolchain.
I think what happened is clang picked gcc installation in /usr/lib/gcc/i686-linux-gnu/4.8 from libgcc-4.8-dev:i386 package.

$ cat /etc/issue
Ubuntu 13.10 \n \l

$ dpkg -l | grep -E "(stdc++|gcc|g++|multilib)"
ii g++ 4:4.8.1-2ubuntu3 amd64 GNU C++ compiler
ii g++-4.7 4.7.3-7ubuntu3 amd64 GNU C++ compiler
ii g++-4.7-multilib 4.7.3-7ubuntu3 amd64 GNU C++ compiler (multilib files)
ii g++-4.8 4.8.1-10ubuntu9 amd64 GNU C++ compiler
ii g++-4.8-multilib 4.8.1-10ubuntu9 amd64 GNU C++ compiler (multilib files)
ii g++-multilib 4:4.8.1-2ubuntu3 amd64 GNU C++ compiler (multilib files)
ii gcc 4:4.8.1-2ubuntu3 amd64 GNU C compiler
ii gcc-4.7 4.7.3-7ubuntu3 amd64 GNU C compiler
ii gcc-4.7-base:amd64 4.7.3-7ubuntu3 amd64 GCC, the GNU Compiler Collection (base package)
ii gcc-4.7-multilib 4.7.3-7ubuntu3 amd64 GNU C compiler (multilib files)
ii gcc-4.8 4.8.1-10ubuntu9 amd64 GNU C compiler
ii gcc-4.8-base:amd64 4.8.1-10ubuntu9 amd64 GCC, the GNU Compiler Collection (base package)
ii gcc-4.8-base:i386 4.8.1-10ubuntu9 i386 GCC, the GNU Compiler Collection (base package)
ii gcc-4.8-multilib 4.8.1-10ubuntu9 amd64 GNU C compiler (multilib files)
ii gcc-multilib 4:4.8.1-2ubuntu3 amd64 GNU C compiler (multilib files)
ii lib32gcc-4.7-dev 4.7.3-7ubuntu3 amd64 GCC support library (32 bit development files)
ii lib32gcc-4.8-dev 4.8.1-10ubuntu9 amd64 GCC support library (32 bit development files)
ii lib32gcc1 1:4.8.1-10ubuntu9 amd64 GCC support library (32 bit Version)
ii lib32stdc++-4.8-dev 4.8.1-10ubuntu9 amd64 GNU Standard C++ Library v3 (development files)
ii lib32stdc++6 4.8.1-10ubuntu9 amd64 GNU Standard C++ Library v3 (32 bit Version)
ii lib32stdc++6-4.7-dev 4.7.3-7ubuntu3 amd64 GNU Standard C++ Library v3 (development files)
ii libgcc-4.7-dev:amd64 4.7.3-7ubuntu3 amd64 GCC support library (development files)
ii libgcc-4.8-dev:amd64 4.8.1-10ubuntu9 amd64 GCC support library (development files)
ii libgcc-4.8-dev:i386 4.8.1-10ubuntu9 i386 GCC support library (development files)
ii libgcc1:amd64 1:4.8.1-10ubuntu9 amd64 GCC support library
ii libgcc1:i386 1:4.8.1-10ubuntu9 i386 GCC support library
ii libstdc++-4.8-dev:amd64 4.8.1-10ubuntu9 amd64 GNU Standard C++ Library v3 (development files)
ii libstdc++-4.8-dev:i386 4.8.1-10ubuntu9 i386 GNU Standard C++ Library v3 (development files)
ii libstdc++6:amd64 4.8.1-10ubuntu9 amd64 GNU Standard C++ Library v3
ii libstdc++6:i386 4.8.1-10ubuntu9 i386 GNU Standard C++ Library v3
ii libstdc++6-4.7-dev:amd64 4.7.3-7ubuntu3 amd64 GNU Standard C++ Library v3 (development files)
ii libx32gcc-4.7-dev 4.7.3-7ubuntu3 amd64 GCC support library (x32 development files)
ii libx32gcc-4.8-dev 4.8.1-10ubuntu9 amd64 GCC support library (x32 development files)
ii libx32gcc1 1:4.8.1-10ubuntu9 amd64 GCC support library (x32)
ii libx32stdc++-4.8-dev 4.8.1-10ubuntu9 amd64 GNU Standard C++ Library v3 (development files)
ii libx32stdc++6 4.8.1-10ubuntu9 amd64 GNU Standard C++ Library v3 (x32)
ii libx32stdc++6-4.7-dev 4.7.3-7ubuntu3 amd64 GNU Standard C++ Library v3 (development files)

$ ./bin/clang++ -c ../1.cc -m32 -v
clang version 3.5.0 (205056)
Target: i386-unknown-linux-gnu
Thread model: posix
Found candidate GCC installation: /usr/lib/gcc/i686-linux-gnu/4.8
Found candidate GCC installation: /usr/lib/gcc/i686-linux-gnu/4.8.1
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.7
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.7.3
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.8
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.8.1
Selected GCC installation: /usr/lib/gcc/i686-linux-gnu/4.8
Candidate multilib: .;@m32
Selected multilib: .;@m32
"/build/llvm/build0/bin/clang-3.5" -cc1 -triple i386-unknown-linux-gnu -emit-obj -mrelax-all -disable-free -main-file-name 1.cc -mrelocation-model static -mdisable-fp-elim -fmath-errno -masm-verbose -mconstructor-aliases -fuse-init-array -target-cpu pentium4 -v -coverage-file /build/llvm/build0/1.o -resource-dir /build/llvm/build0/bin/../lib/clang/3.5.0 -internal-isystem /usr/lib/gcc/i686-linux-gnu/4.8/../../../../include/c++/4.8 -internal-isystem /usr/lib/gcc/i686-linux-gnu/4.8/../../../../include/c++/4.8/i686-linux-gnu -internal-isystem /usr/lib/gcc/i686-linux-gnu/4.8/../../../../include/c++/4.8/backward -internal-isystem /usr/lib/gcc/i686-linux-gnu/4.8/../../../../include/i686-linux-gnu/c++/4.8 -internal-isystem /usr/local/include -internal-isystem /build/llvm/build0/bin/../lib/clang/3.5.0/include -internal-externc-isystem /usr/include/i386-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -fdeprecated-macro -fdebug-compilation-dir /build/llvm/build0 -ferror-limit 19 -fmessage-length 173 -mstackrealign -fobjc-runtime=gcc -fcxx-exceptions -fexceptions -fdiagnostics-show-option -vectorize-slp -o 1.o -x c++ ../1.cc
clang -cc1 version 3.5.0 based upon LLVM 3.5.0svn default target x86_64-unknown-linux-gnu
ignoring nonexistent directory "/usr/lib/gcc/i686-linux-gnu/4.8/../../../../include/c++/4.8/i686-linux-gnu"
ignoring nonexistent directory "/usr/lib/gcc/i686-linux-gnu/4.8/../../../../include/i686-linux-gnu/c++/4.8"
ignoring nonexistent directory "/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/lib/gcc/i686-linux-gnu/4.8/../../../../include/c++/4.8
/usr/lib/gcc/i686-linux-gnu/4.8/../../../../include/c++/4.8/backward
/usr/local/include
/build/llvm/build0/bin/../lib/clang/3.5.0/include
/usr/include/i386-linux-gnu
/usr/include
End of search list.
In file included from ../1.cc:1:
/usr/lib/gcc/i686-linux-gnu/4.8/../../../../include/c++/4.8/limits:42:10: fatal error: 'bits/c++config.h' file not found
#include <bits/c++config.h>
^
1 error generated.

$ find /usr/include/ /usr/lib -name c++config.h
/usr/include/x86_64-linux-gnu/c++/4.8/bits/c++config.h
/usr/include/x86_64-linux-gnu/c++/4.8/32/bits/c++config.h
/usr/include/x86_64-linux-gnu/c++/4.8/x32/bits/c++config.h
/usr/include/x86_64-linux-gnu/c++/4.7/bits/c++config.h
/usr/include/x86_64-linux-gnu/c++/4.7/32/bits/c++config.h
/usr/include/x86_64-linux-gnu/c++/4.7/x32/bits/c++config.h
/usr/include/i386-linux-gnu/c++/4.8/bits/c++config.h

@chandlerc
Copy link
Member

This was pretty terrible. The code trying to support the multiarch setup was... very strange. I may have written or reviewed it, but it was quite wrong.

I've fixed this (and possibly other issues) in r216528. Sorry for the trouble. Re-open if it still is busted.

@chandlerc
Copy link
Member

That should have been r216531. Sorry.

@llvmbot llvmbot transferred this issue from llvm/llvm-bugzilla-archive Dec 9, 2021
This issue was closed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bugzilla Issues migrated from bugzilla clang:driver 'clang' and 'clang++' user-facing binaries. Not 'clang-cl'
Projects
None yet
Development

No branches or pull requests

3 participants