我用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) int _ cdecl add(int,int)”( _imp_?add@@YAHHH@Z)在函数 _main mainCode.exe 中引用:致命错误 LNK1120:1 个未解析的外部
为什么那个 dll 在 C 代码而不是 C++ 中工作?
顺便说一句,我使用了 MinGW 的网站作为参考。 http://www.mingw.org/wiki/MSVC_and_MinGW_DLLs
主代码.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;
}