Code fails with linker error. Why?

eles via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sat Oct 4 03:39:28 PDT 2014


On Saturday, 4 October 2014 at 10:27:18 UTC, John Colvin wrote:
> On Saturday, 4 October 2014 at 04:02:46 UTC, eles wrote:
>> On Friday, 3 October 2014 at 15:47:33 UTC, John Colvin wrote:
>>> On Friday, 3 October 2014 at 15:44:16 UTC, eles wrote:
>>>> class ShapeSurface(T) {
>>>> public:
>>>> 	int formula();
>>>
>>> that means you have a definition of formula elsewhere (which 
>>> the linker tries to find, but obviously fails. What you want 
>>> is
>>>
>>> class ShapeSurface(T) {
>>> public:
>>> 	abstract int formula();
>>
>> Thanks, but still. The compiler shall not let that code pass 
>> down to the linker. It has everything it needs to not do that, 
>> or it shall have. Linker errors shall be simply because the 
>> libraries are not in place (either not installed, either 
>> linking path not correctly configured, either broken versions 
>> of those libraries).
>
> Sorry, but that's just not how it works. There is no 
> requirement for the definition of a function to be found in the 
> same compilation unit as it's declaration.
>
> // a.d
> void foo();
> void main() { foo(); }
>
> // b.d
> import std.stdio;
> void foo() { writeln("Hello World"); }
>
> $ ls
> a.d     b.d
>
> $ dmd b.d -c
>
> $ ls
> a.d     b.d     b.o
>
> $ dmd a.d b.o
>
> $ ls
> a       a.d     a.o     b.d     b.o
>
> $ ./a
> Hello World

This seem to allow an entire class of problems, by linking 
against long-time forgotten functions...


More information about the Digitalmars-d-learn mailing list