1 | ================================ |
2 | Frequently Asked Questions (FAQ) |
3 | ================================ |
4 | |
5 | .. contents:: |
6 | :local: |
7 | |
8 | Driver |
9 | ====== |
10 | |
11 | I run ``clang -cc1 ...`` and get weird errors about missing headers |
12 | ------------------------------------------------------------------- |
13 | |
14 | Given this source file: |
15 | |
16 | .. code-block:: c |
17 | |
18 | #include <stdio.h> |
19 | |
20 | int main() { |
21 | printf("Hello world\n"); |
22 | } |
23 | |
24 | |
25 | If you run: |
26 | |
27 | .. code-block:: console |
28 | |
29 | $ clang -cc1 hello.c |
30 | hello.c:1:10: fatal error: 'stdio.h' file not found |
31 | #include <stdio.h> |
32 | ^ |
33 | 1 error generated. |
34 | |
35 | ``clang -cc1`` is the frontend, ``clang`` is the :doc:`driver |
36 | <DriverInternals>`. The driver invokes the frontend with options appropriate |
37 | for your system. To see these options, run: |
38 | |
39 | .. code-block:: console |
40 | |
41 | $ clang -### -c hello.c |
42 | |
43 | Some clang command line options are driver-only options, some are frontend-only |
44 | options. Frontend-only options are intended to be used only by clang developers. |
45 | Users should not run ``clang -cc1`` directly, because ``-cc1`` options are not |
46 | guaranteed to be stable. |
47 | |
48 | If you want to use a frontend-only option ("a ``-cc1`` option"), for example |
49 | ``-ast-dump``, then you need to take the ``clang -cc1`` line generated by the |
50 | driver and add the option you need. Alternatively, you can run |
51 | ``clang -Xclang <option> ...`` to force the driver pass ``<option>`` to |
52 | ``clang -cc1``. |
53 | |
54 | I get errors about some headers being missing (``stddef.h``, ``stdarg.h``) |
55 | -------------------------------------------------------------------------- |
56 | |
57 | Some header files (``stddef.h``, ``stdarg.h``, and others) are shipped with |
58 | Clang --- these are called builtin includes. Clang searches for them in a |
59 | directory relative to the location of the ``clang`` binary. If you moved the |
60 | ``clang`` binary, you need to move the builtin headers, too. |
61 | |
62 | More information can be found in the :ref:`libtooling_builtin_includes` |
63 | section. |
64 | |
65 | |