我使用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",我看不出它不起作用的原因。

10-07 15:27