www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 22323] New: Link error for virtual destructor of C++ class in


          Issue ID: 22323
           Summary: Link error for virtual destructor of C++ class in DLL
           Product: D
           Version: D2
          Hardware: x86_64
                OS: Windows
            Status: NEW
          Severity: normal
          Priority: P1
         Component: dmd
          Assignee: nobody puremagic.com
          Reporter: tim.dlang t-online.de

A C++ class with virtual destructor in a DLL can't be used from D, because a
symbol is not found during linking.

/////////////// testdestructor.d /////////////////

extern(C++) class C

void main()
    C o = new C;

///////////// testdestructorcpp.cpp //////////////

class __declspec(dllexport) C
    virtual ~C();




First I'm compiling a DLL from the C++ file:
cl /LD /nologo testdestructorcpp.cpp

Then I try to compile the D program using the DLL, which fails to link:
dmd -m64 testdestructor.d testdestructorcpp.lib
testdestructor.obj : error LNK2001: unresolved external symbol "public: virtual
void * __cdecl C::`scalar deleting destructor'(unsigned int)"
testdestructor.exe : fatal error LNK1120: 1 unresolved externals
Error: linker exited with status 1120

It works using static linking.

In the forum I found a description of the same problem:
https://forum.dlang.org/thread/ijamdvhliodezmubgaxf forum.dlang.org

Sep 19 2021