我用MinGW编译了一个dll。为此,我使用了以下命令:
gcc -shared -o MathsDll.dll MathsDll.c -Wl,--output-def,MathsDll.def,--out-implib,libMathsDll.a
lib /machine:i386 /def:MathsDll.def
然后我尝试从C代码中使用该DLL。我的编译命令如下:
cl mainCode.c MathsDll.lib
它适用于那种情况,但当我将mainCode.c文件更改为mainCode.cpp时,我收到错误:
mainCode.obj:错误LNK2019:未解析的外部符号“__declspec(dllimport) 函数_main中引用的int _ cdecl add(int,int)“( _imp_?add @@ YAHHH @ Z) mainCode.exe:致命错误LNK1120:1个未解析的外部
为什么dll在C代码中工作但是C ++?
顺便说一下,我使用MinGW的网站作为参考。 http://www.mingw.org/wiki/MSVC_and_MinGW_DLLs
mainCode.cpp:
#include <stdio.h>
#include "MathsDll.h"
int main()
{
printf("%d",add(3,4));
}
MathsDll.h:
#ifdef MATHDLL_EXPORTS
#define MATHDLL_API extern "C" __declspec(dllexport)
#else
#define MATHDLL_API __declspec(dllimport)
#endif
MATHDLL_API int add(int,int);
MATHDLL_API int multiply(int,int);
MathsDll.c / MathsDll.cpp:
#include "MathsDll.h"
int add(int a,int b)
{
return a+b;
}
int multiply(int a,int b)
{
return a*b;
}
答案 0 :(得分:2)
如果您在用C编写的DLL中有要访问的函数 从C语言或C ++语言模块,你应该使用 __cplusplus预处理程序宏来确定正在编译哪种语言,然后使用C链接声明这些函数 用于C ++语言模块。