<div class="gmail_quote">On 14 April 2012 11:36, Walter Bright <span dir="ltr"><<a href="mailto:newshound2@digitalmars.com">newshound2@digitalmars.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="HOEnZb"><div class="h5">On 4/14/2012 1:01 AM, Vladimir Panteleev wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On Saturday, 14 April 2012 at 02:46:03 UTC, Walter Bright wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
all assert(exp) does when it trips is call a function in the library. If you<br>
provide your own version of that function, the one in the library won't be<br>
linked in.<br>
</blockquote>
<br>
This indeed works, but how exactly? In what case does the linker pick one<br>
function (which?) and in what case does it complain about duplicate symbol<br>
definitions? Do they have to be in different libraries?<br>
</blockquote>
<br></div></div>
The linker works by looking in the library for any unresolved symbols. The symbol is not unresolved if you supply your own explicitly in an object file explicitly supplied to the linker.<br>
<br>
The linker knows nothing about D, C, assembler, or anything but resolving symbols.<br>
</blockquote></div><br><div>How do you define 'the' linker? Is this also how ld and link.exe works?</div>