<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On 12 June 2017 at 13:54, Modulo De Pi via cfe-dev <span dir="ltr"><<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div><div><div><div><div>Hello everyone,<br><br></div>I've recently discovered the LLVM project and Clang, and I am quite happy with it (nice piece of work!). However, I can't figure why this fails:<br></div><br></div><span style="font-family:monospace,monospace">$ cat > freestanding.cpp<br></span></div><span style="font-family:monospace,monospace">#include <cstdint><br></span></div><span style="font-family:monospace,monospace">$ clang -c -std=c++11 -ffreestanding --target=i386-none-elf freestanding.cpp<br>bug.cpp:1:10: fatal error: 'cstdint' file not found<br>#include <cstdint><br>         ^<br>1 error generated.<br>$</span> <br><br></div><div>Trying to compile a source file that merely includes a C++11 header file with the -ffreestanding flag just fails. The same problem occurs for every C++11 freestanding header (<cstdint>, <cstddef>, <climits>...). However, trying to include the pre-C++11 freestanding headers (<stdint.h>, <stddef.h>, <limits.h>, ...) works just fine. I have also tried different targets.<br><br></div><div>Any idea? Is this some configuration issue? Or some glitch? I can hardly find any information about this problem, this is why I am asking you people.</div></div></blockquote><div><br></div><div>Clang does not provide an implementation of the freestanding C++ headers; you need a C++ standard library (typically libc++ or libstdc++) installed to provide those. (You also need a C standard library to provide the foo.h headers that the C++ standard library itself depends on.)</div><div><br></div><div>For certain C standard library headers, there is an informal arrangement between the C standard library implementation and the compiler that the compiler will provide certain of the headers -- stddef.h, stdarg.h, and a few others (which need or significantly benefit from compiler magic) -- although the compiler's version will often defer to the C stdlib version if it exists. But this does not extend to a complete set of freestanding headers.</div><div><br></div><div>If you have a C++ standard library installed, Clang should automatically detect it. If it doesn't, we'd want:</div><div><br></div><div> * the output of clang -v when compiling a C++ source file</div><div> * information about where the standard library was installed</div><div><br></div><div>to determine why it wasn't automatically found.</div></div></div></div>