Prototypes (was Re: OK, so why _does_ ld resolve text against data?)
Peter Blemel
peter at msinc.msi.com
Fri Aug 24 10:28:11 AEST 1990
It has been noted that the linker *should* resolve symbols to local code before
resolving them from a library. Two problems arise from this assumption in my
personal experience:
1) I decided to rewrite a function, but I changed the order of the arguments:
If the system I am porting to has ansi prototypes the compiler will bomb
on the code declaring that my arguments are incorrect.
I had used index as a global int within a file (properly declaring it, and
referencing it), but when I tried to port the code to a machine with
prototypes, the compiler choked on my use of index because of the
prototype definition, effectively making index a reserved word. Should
functions in the standard c library be forced as reserved words?
2) In an even worse oversight, Apollo has implimented shared libraries
including the lex library libl.a. My application needed a very large
yytext[] array, so I declared it myself and the Sun/VAX/IBM linkers
correctly used my array because I do not include -ll in the arguments
to ld. The Apollo linker automagically loads all of the shared libraries,
so that even though I do *not* specify -ll at link time, it is still
loaded and a multiply defined symbol yytext is produced. My code (under
these conditions) can not be ported without a rewrite becuase I need the
expanded yytext buffer.
Peter Blemel
----------------
unmvax.cs.unm.edu!bbx!yenta!msinc!peter
More information about the Comp.unix.wizards
mailing list