c++ - Common LNK 2019 - 头文件中的函数声明 - 源文件中的定义

标签 c++ linker c++-cli

考虑到这是一个常见问题,如果使用此文件逻辑,此错误的来源可能是什么:

  • Utils.h: 声明bool Dummy();
  • Utils.cpp:定义 bool Dummy() {return true;}
  • ClassA.h:一个不相关的 class A { bool sheet;公共(public):一个(); };
  • ClassA.cpp:无关代码:

     #include "Utils.h"
     #include "ClassA.h"
     A::A() { sheet = Dummy(); }
    

    注意:所有头文件都包含守卫 #pragma once 宏。

错误:像这样

Error   2   error LNK2028: unresolved token (0A00000B) "bool __clrcall Dummy(void)" 

Error   3   error LNK2019: unresolved external symbol "bool __clrcall Dummy(void)" .... in ClassA.obj

最佳答案

bool __clrcall Dummy(void)

您正在使用/clr 编译 ClassA.cpp 文件,生成托管代码。但是,您的 Dummy() 函数是在没有/clr 的情况下编译的,从而使调用约定成为 __cdecl。链接器注意到差异,它找不到 Dummy 的托管实现。

您必须告诉编译器 Utils.cpp 是为 native 代码构建的。像这样修复 ClassA.cpp:

#pragma managed(push, off)
#include "Utils.h"
#pragma managed(pop)
#include "ClassA.h"
// etc...

关于c++ - Common LNK 2019 - 头文件中的函数声明 - 源文件中的定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11206779/

相关文章:

c++ - 在 C++ 中调用手册第 2 节中的函数

c++ - ld 报告缺少符号,但符号似乎存在

visual-studio-2010 - 静态库中的隐藏函数

c# - 使用 C# 中的 C++/CLI 结构

c++-cli - 我可以阻止 C++/CLI 将 IDisposable 添加到我的 ref 类吗?

c++ - 制作索引创建类

c++ - 将二维数组作为指向整数数组的指针传递给函数

mysql - 如何在 Visual C++/CLI 中从 MySQL 检索图像

c++ - 使用 double 的程序的意外行为

c++ - 检查静态库是否定义了所有符号