Frequently Asked Questions (FAQ)¶
Driver¶
I run clang -cc1 ...
and get weird errors about missing headers¶
Given this source file:
#include <stdio.h>
int main() {
printf("Hello world\n");
}
If you run:
$ 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 driver. The driver invokes the frontend with options appropriate
for your system. To see these options, run:
$ 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 Builtin includes section.