[gnu.utils.bug] ld bug

murf@CS.UTEXAS.EDU (Steve Murphy) (08/09/89)

When   I get a  "multiply   defined" message  I  get way more  than  I
bargained for, including some lies.

It seems that ALL REFERENCES are  listed as  well  as DEFINITIONS, and
all are labled "defined".

You should see  what happens  if I have   multiple copies of  free and
malloc and realloc, on a BIG executable  that used these  calls a LOT.
It makes it REAL HARD to sort out the problem.


murf

tiemann@SUN.COM (Michael Tiemann) (01/22/90)

Here's a build which fails for reasons I understand:

    cd /home2/gnu/prog2c/
    time make -k
    g++ -B/home2/gnu/g++/ -g -o p2 p2_CPU.o p2_ctrl.o p2_disk.o p2_disk_sched.o p2_fault.o  p2_mem.o p2_proc.o p2_queue.o -L/home2/gnu/libg++/src
    /home2/gnu/usr/local/lib/g++-include/BitSet.h:359: Undefined symbol BitSet::error(char *) referenced from text segment
    p2_fault.c:256: Undefined symbol lg() referenced from text segment
    p2_fault.c:256: Undefined symbol lg() referenced from text segment
    p2_fault.c:256: Undefined symbol lg() referenced from text segment
    *** Error code 1
    make: Warning: Target `all' not remade because of errors
	    9.2 real         1.2 user         1.2 sys  

    Compilation finished at Mon Jan 22 07:56:07

The bug is that /home2/gnu/usr/local/lib/g++-include/BitSet.h is the
line where the reference occurs, but the linker doens't tell me the
offending .o file that it came from.  When I switch my compiler
library paths, I won't know which file to recompile (without
searching).  It would be nice if this error were reported like this:

in file foo.o:
...all errors of file foo.o...
in file bar.o:
...all errors of file bar.o...
etc.

Sound reasonable?

Michael