std library hooks

Walter Bright newshound2 at digitalmars.com
Sat Apr 14 21:09:48 PDT 2012


On 4/14/2012 4:54 PM, Manu wrote:
> On 14 April 2012 22:40, Walter Bright <newshound2 at digitalmars.com
> <mailto:newshound2 at digitalmars.com>> wrote:
>
>     On 4/14/2012 2:40 AM, Vladimir Panteleev wrote:
>
>         So object files take priority over library files?
>
>
>     Yes, because object files are NOT searched. They are incorporated. Libraries
>     get recursively searched for unresolved symbols.
>
>
> I was under the impression library files were nothing more than a collection of
> object files?

That's right. But if the linker just added them all in, then every program would 
be gigantic. So, it only adds in ones that satisfy an unresolved symbol.



> I'm aware of how a linker works :) .. I wouldn't expect the linker to be able to
> resolve multiply defined symbols though without instruction...

The linker does not add in library modules to add symbols that are already resolved.


> I just tried it, and I got the error I expected:
>
> LIBCMTD.lib(atox.obj) : error LNK2005: _atoi already defined in Unit.obj
>
> In C, I would always explicitly declare weak linkage to do this... what's the
> point of the weak attribute if not for this?

First you need to find out why you have multiple definitions of the same symbol 
being linked together. For example, do not specify libcmtd.lib to the linker, 
then link, then see what your unresolved symbols are.


More information about the Digitalmars-d mailing list