Node:Which language,
Next:Objective C,
Previous:C++ comments,
Up:Compiling
Q: I type GCC PROG.CC and GCC complains that it can't recognize
PROG.CC
's file format. How come a C++ compiler doesn't recognize a
C++ source??
Q: I type GCC PROG.C to compile a C program which I already
remember to pass compilation without a single warning, and suddenly it
gives all kinds of strange error messages and unresolved externals.
A: That's because you typed your source file extension in UPPER case. GCC is not case-insensitive about filenames like DOS is, and it uses the file's extension to determine how to compile a file. Valid extensions are:
.cc
.C
.cxx
.cpp
.c
.i
.ii
.m
.S
.s
Any other file is passed to the linker, under the assumption that it's an object file.
In the examples above, PROG.C
is taken as a C++ program, not a C
one, and PROG.CC
is passed to the linker as if it were an object
file. You can see what GCC does by adding the -v
switch to the GCC
command line; if you see that it's invoking cc1plus.exe
(the C++
compiler) instead of cc1.exe
(the C compiler), or calling
ld.exe
(the linker) on a source file, then you'd know this is your
problem. If you have problems keeping up with the verbose GCC output
triggered by -v
, see how to capture GCC output, earlier in this FAQ.
You can override the default rules gcc uses to decide how each input
file should be treated, using the -x language
switch. For
instance, the command
gcc -x c++ prog.c
compiles prog.c
as C++ source. See The GNU C Compiler Manual, for more info on
-x
options.