链接器错误。MinGW 无法从 MSVS dll 导出类

Linker error. MinGW can't export class from MSVS dll

本文关键字:dll MSVS 错误 MinGW 链接      更新时间:2023-10-16

我使用MinGw(i686-4.9.2-win32)并尝试从dll导出该类(在visual studio中制作)但我收到一个错误undefined reference to _imp___ZN11ConsoleTestC1E'

BUT函数foo()从同一库导出,没有错误。。

这是我的代码

testdll.h

#ifdef CONSOLETEST_EXPORT
#define CONSOLETEST_API __declspec(dllexport)
#else
#define CONSOLETEST_API __declspec(dllimport)
#endif
extern "C" class CONSOLETEST_API ConsoleTest{
public:
     ConsoleTest();
};
extern "C" void CONSOLETEST_API foo();

testdll.cpp

#include "testdll.h"
ConsoleTest::ConsoleTest(){}
void  foo(){}

在main.cpp中:

 #include "testdll.h"
 int main()
 {
  foo();
  ConsoleTest* cc = new ConsoleTest();
 }

PS:我试图从.dll:创建.a库

pexports testdll.dll | sed "s/^_//" > testdll.def
dlltool -U -d testdll.def -l testdll.a

但这无济于事。

提前感谢您的建议!

extern "C" class无法工作。您可以dll导出类,但不能使用C命名约定。

ISO C++03 7.5[dcl.link]/4:

类成员的名称和成员函数的C语言链接被忽略类成员函数的类型。

如果你去掉extern "C",我看没有理由它不起作用。