c++ - C++ 中未解析的外部符号

标签 c++ visual-studio-2010

我在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/

相关文章:

c# - 如果我有 MDIParent,如何创建全局变量?

c - 对项目中的所有文件使用相同的结构

visual-studio-2010 - Visual Studio 2010,如何快速抓取一个对象作为序列化的XML? (调试时)

c++ - 定义遍历函数的 const 和非常量版本

c++ - 如何在不使用全局变量的情况下在函数之间使用多个变量?

c++ - 自动将一个对象添加到该对象父对象的 vector 中

c++ - 从三角形网格及其轮廓中提取锐边并使用 openGL 进行渲染

c++ - Eclipse CDT 无法解析模板类的 std::vector

c# - AT命令发送/接收短信

c# - 为 SOAP 网络服务传递 WSSE Usernametoken 的正确方式