我在VS2010下开发的C++ Dll程序中定义了三个函数。
int __stdcall Scan()
{
...
}
int __stdcall Setup(int e_time, double s_value, double cs_value, double gain, int nIm, char* name)
{
...
}
int __stdcall TearDown()
{
....
}
我在 Program.def 中将它们定义为
LIBRARY
EXPORTS
Scan @1
Setup @2
TearDown @3
我还有一个头文件Program.h
//DLL Export-Import definitions
#define BUILD_DLL
#ifdef BUILD_DLL
#define EXPORT __declspec(dllexport)
#else
#define EXPORT __declspec(dllimport)
#endif
但是我遇到了一些错误:
- “49 错误 LNK2001:Program.def 第 1 行中无法解析的外部符号扫描”
- “51 错误 LNK2001:Program.def 第 1 行中无法解析的外部符号设置”
和
- “51 错误 LNK1120:Program.lib 中有 2 个未解析的外部符号”
错误信息不会提示定义的第三个函数。我在链接器中使用了/MAP 选项,并为映射文件定义了一个文件名,但我没有得到 MAP 文件输出来检查这些符号是如何定义的。我不能使用 dumpbin 程序,因为构建还没有创建 dll 文件。
我卡住了。任何帮助/指针将不胜感激。谢谢。
最佳答案
您需要声明 C 风格的链接,否则 C++ 名称修饰 会把事情搞砸。
对每个函数使用
extern "C" {
/*your function here*/
}
关于c++ - C++ 中未解析的外部符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22847397/