Linker error: Symbol Undefined
Brad Roberts
braddr at puremagic.com
Fri Oct 11 14:16:31 PDT 2013
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.
More information about the Digitalmars-d-learn
mailing list