[an error occurred while processing this directive]
Node:No input files,
Next:Missing headers or libraries,
Previous:Compiling,
Up:Compiling
Q: I created a simple source file hello.c
, but when I invoke
the compiler, it says: "gcc.exe: hello.c: No such file or directory",
and then exits with the message "No input files." But hello.c
is there, so why won't the compiler find it??
A: One popular reason for this problem is that you use one of those
Windows editors that think they know better how do you want them to name
the files. For example, Notepad
always attaches the
.txt
extension to the file name you provide, so when you type
hello.c
into the dialog box, Notepad
actually creates
hello.c.txt
. In addition, the files listed by My
Computer
by default have their extensions not shown, which creates an
illusion that hello.c
really is there.
Use the DIR
command in the DOS Box to see what files are in
the directory where you run GCC. (If you have the GNU Fileutils
installed, you can use ls
as well.) This will always show the
full names of the files, exactly like GCC sees them.
You are generally advised to stay away of such "helpful" editors.
Notepad
is not suited well for editing programs, anyway. If
you must use it, a work-around is to type the file name in quotes:
"hello.c"
; then Notepad
will leave it alone and not
append the .txt
extension.
Another reason for GCC to not be able to find the source file is because you use long file names on Windows/NT. Suppose you invoke GCC like this:
gcc -c file_name.c
The name file_name.c
exceeds the DOS 8+3 limits, so if you have
such a file, you probably created it with some Windows editor. However,
DJGPP programs cannot access long file names on Windows/NT, so gcc
doesn't find such a file and complains.
Type dir /x from the command line to see the short 8+3 alias name
of your file (in the example above, it should be file_n~1.c
or
some such), and use that short name when you invoke GCC. In general, if
you want to avoid such problems on Windows/NT, you should restrict
yourself to file names that are valid DOS 8+3 names.