| # Frequently Asked Questions (FAQ) | |
| ## Driver | |
| ### I run `clang -cc1 ...` and get weird errors about missing headers | |
| Given this source file: | |
| ```c | |
| #include <stdio.h> | |
| int main() { | |
| printf("Hello world\n"); | |
| } | |
| ``` | |
| If you run: | |
| ```console | |
| $ clang -cc1 hello.c | |
| hello.c:1:10: fatal error: 'stdio.h' file not found | |
| #include <stdio.h> | |
| ^ | |
| 1 error generated. | |
| ``` | |
| `clang -cc1` is the frontend, `clang` is the {doc}`driver | |
| <DriverInternals>`. The driver invokes the frontend with options appropriate | |
| for your system. To see these options, run: | |
| ```console | |
| $ clang -### -c hello.c | |
| ``` | |
| Some clang command line options are driver-only options, some are frontend-only | |
| options. Frontend-only options are intended to be used only by clang developers. | |
| Users should not run `clang -cc1` directly, because `-cc1` options are not | |
| guaranteed to be stable. | |
| If you want to use a frontend-only option ("a `-cc1` option"), for example | |
| `-ast-dump`, then you need to take the `clang -cc1` line generated by the | |
| driver and add the option you need. Alternatively, you can run | |
| `clang -Xclang <option> ...` to force the driver pass `<option>` to | |
| `clang -cc1`. | |
| ### I get errors about some headers being missing (`stddef.h`, `stdarg.h`) | |
| Some header files (`stddef.h`, `stdarg.h`, and others) are shipped with | |
| Clang --- these are called builtin includes. Clang searches for them in a | |
| directory relative to the location of the `clang` binary. If you moved the | |
| `clang` binary, you need to move the builtin headers, too. | |
| More information can be found in the {ref}`libtooling_builtin_includes` | |
| section. | |