The linkage for the vtable for any class marked dllimport is generated as a standard external link rather than a dllimport "__imp_" link. This results in linker diagnostics such as:
Info: resolving vtable for TestObject by linking to __imp___ZTV10TestObject (auto-import) d:/jsupport/mingw/bin/../lib/gcc/mingw32/4.3.3-dw2/../../../../mingw32/bin/ld.exe: warning: auto-importing has been activated without --enable-auto-import specified on the command line. This should work unless it involves constant data structures referencing symbols from auto-imported DLLs. The following simple testcase demonstrates this. ----- vttest.cpp ----- struct __attribute__((dllimport)) TestObject { virtual void VirtFunc(); }; int main() { TestObject obj; obj.VirtFunc(); return 0; } ----- vttestdll.cpp ----- struct __attribute__((dllexport)) TestObject { virtual void VirtFunc() {} }; > g++ -shared -o vttest.dll -Wl,--out-implib,libvttest.dll.a vttestdll.cpp Creating library file: libvttest.a > g++ -o vttest.exe vttest.cpp libvttest.dll.a Info: resolving vtable for TestObject by linking to __imp___ZTV10TestObject (auto-import) d:/jsupport/mingw/bin/../lib/gcc/mingw32/4.3.3-dw2/../../../../mingw32/bin/ld.exe: warning: auto-importing has been activated without --enable-auto-import specified on the command line. This should work unless it involves constant data structures referencing symbols from auto-imported DLLs. -- Summary: Linkage broken for dllimport vtables Product: gcc Version: 4.3.3 Status: UNCONFIRMED Severity: critical Priority: P3 Component: target AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: tdragon at tdragon dot net GCC build triplet: mingw32 GCC host triplet: mingw32 GCC target triplet: mingw32 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39578