Related articles |
---|
How C compilers handle multiple function definitions. typingcat@gmail.com (RealCat) (2008-12-28) |
Re: How C compilers handle multiple function definitions. armelasselin@hotmail.com (Armel) (2008-12-29) |
Re: How C compilers handle multiple function definitions. mburrel@uwo.ca (Mike Burrell) (2008-12-29) |
Re: How C compilers handle multiple function definitions. gah@ugcs.caltech.edu (glen herrmannsfeldt) (2008-12-30) |
Re: How C compilers handle multiple function definitions. kamalpr@hp.com (kamal) (2009-01-01) |
Re: How C compilers handle multiple function definitions. kamalpr@hp.com (kamal) (2009-01-01) |
From: | kamal <kamalpr@hp.com> |
Newsgroups: | comp.compilers |
Date: | Thu, 1 Jan 2009 02:49:19 -0800 (PST) |
Organization: | Compilers Central |
References: | 08-12-107 08-12-108 |
Keywords: | linker |
Posted-Date: | 01 Jan 2009 11:16:19 EST |
On Dec 29 2008, 9:20 pm, "Armel" <armelasse...@hotmail.com> wrote:
> "RealCat" <typing...@gmail.com> a icrit
>
> > If there are functions whose names are the same in object files and
> > library files, what should happen during the compliation? Should this
> > always cause a link error, or can C compilers make assumptions such
> > as : "function definition in the object file has higher precedence
> > over the one in the library file" or "the one in the previously linked
> > library file has higher precedence over the ones in the library files
> > linked later."?
> > Is there any standard behaviour for this case or does it vary with
> > compiler implimentations?
>
> from what I could see:
> - a library is mostly just the concatenation of several objects(=modules),
> so all the treatments are 'as if' the objects where provided in library
> build order, making a library _does not_ resolve references.
it actually does for HP-UX. Every function referenced but not defined
(and this should be true acrosss all platforms) will have a relocation
created by the compiler, which is processed by the linker. If the
linker fails to find a definition in another object file for a given
reference, only then it creates a PLT entry. Note that there can be
only one global definition per module, for there to be no warning from
linker stating that there is a duplication definition of a symbol.
> - libraries which intend to let some functions be overriden are built in a
> "one function per object/module" fashion, actually solving the above
> question.
>
you mean, by defining a function as static.
> It seems that there is no real standard shared by all _linkers_ but
> the "one function per object" paradigm makes your question simple
> enough to be sure that the _first_ "function module" is considered the
> one to choose
so how will you resolve references to that symbol if it is defined in
multiple object files within the same library?
> this technic is often used to override the 'malloc' function and add some
> debugging front end to it, while ensuring the linker will use your own
> version (listed before the -l of C library) is called by the C library
> itself.
that is something to do with forcing symbol resolution in a certain
way. But it doesn't mean you can have more than one definition per
module (assuming each is in a different object file thatw as
concatenated).
regards
-kamal
Return to the
comp.compilers page.
Search the
comp.compilers archives again.