Linker error: Symbol Undefined

Namespace rswhite4 at googlemail.com
Fri Oct 11 15:33:29 PDT 2013


On Friday, 11 October 2013 at 21:16:38 UTC, Brad Roberts wrote:
> It's due to having the destructor versioned out when building 
> foo and visible when building bar. When brought together, 
> you've created an incompatible whole.  There's no destructor 
> actually included in foo's .o file that you told it it could 
> expect to find.
>
> There's no bug in the compiler or linker, just your usage of 
> mis-matched code.
>
> On 10/11/13 11:39 AM, Namespace wrote:
>> Hey, I'm curious about this linker error:
>>
>> OPTLINK (R) for Win32  Release 8.00.13
>> Copyright (C) Digital Mars 1989-2010  All rights reserved.
>> http://www.digitalmars.com/ctg/optlink.html
>> bar.obj(bar)
>>  Error 42: Symbol Undefined _D3foo1A6__dtorMFZv
>> --- errorlevel 1
>>
>> foo.d:
>> ----
>> debug import std.stdio;
>>
>> struct A {
>> public:
>>     int id;
>>
>>     this(int id) {
>>         debug writeln("CTor A with ", id);
>>
>>         this.id = id;
>>     }
>>
>>     debug ~this() {
>>         writeln("DTor A with ", id);
>>     }
>> }
>> ----
>>
>> bar.d
>> ----
>> import foo;
>>
>> void test(A a) {
>>     a.id++;
>> }
>>
>> void main() {
>>     test(A(42));
>>     A a = A(23);
>>     test(a);
>> }
>> ----
>>
>> Usage:
>>
>> C:\Users\Besitzer\Desktop>dmd -lib foo.d
>>
>> C:\Users\Besitzer\Desktop>dmd bar.d foo.lib -debug
>> OPTLINK (R) for Win32  Release 8.00.13
>> Copyright (C) Digital Mars 1989-2010  All rights reserved.
>> http://www.digitalmars.com/ctg/optlink.html
>> bar.obj(bar)
>>  Error 42: Symbol Undefined _D3foo1A6__dtorMFZv
>> --- errorlevel 1
>>
>> ====
>> Without -debug or with 'debug' _in_ the DTor (before writeln) 
>> instead before the DTor works fine.

Another question: Is there a way that the DTor is only generated 
if I compile foo with -debug? So that if I compile and link bar.d 
and foo.lib, even with -debug, but compiled foo.d without, the 
DTor is automatically generated? Hope that is not to weird. :D


More information about the Digitalmars-d-learn mailing list