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