Q: Why is it that every time I link a program, the CD-ROM drive is
Q: Whenever I link programs, GCC invokes something called `collect2'
which accesses my LAN when it runs. Why?
A: CD-ROMs or other drives being accessed during linking is due to a
bug in Binutils 2.7 and in an early release of Binutils 2.8.1: the
linker would always try to look for its script
djgpp.djl in a
certain directory on the
E: drive (the former in
Binutils 2.7, the latter in 2.8.1), no matter which disk uses that
letter (these accesses usually go unnoticed with hard disks, but are
visible with CD-ROMs, Zip drives, or other slower devices). Download
and install the latest
bnuNNNb.zip archive you can find on
SimTel.NET mirrors, and the problem should go away.
collect2 seems to be accessing the network, it is due to a
bug in the early ports of GCC 2.95: if a root directory of some drive
appeared in your
collect2 would try to
access a file whose name has two slashes, like
causes Windows 9X to treat this as a UNC (a.k.a. network share) name,
and search the network for such a server which exports this share. The
ports of GCC 2.95.1 and later don't have this bug.
You can see which directories on what drives does the linker try to
access by passing the
--verbose option to the linker. Here's an
gcc -o hello.exe hello.o -Xlinker --verbose > linker.log
This redirects the linker log to a file which you can then examine. Since the list of directories accessed by the linker doesn't depend on the program being linked, you can try this with any trivial program.
Sometimes, accesses to other drives come from some over-zealous anti-virus software. If you have one of these installed, check out its options: perhaps there are some superflous drive letters there.
|webmaster donations bookstore||delorie software privacy|
|Copyright © 2001 by Eli Zaretskii||Updated Apr 2001|