无法将一个项目的头和 CPP 文件与另一个项目链接 LNK2019:未解决的外部符号错误

unable to link header and cpp file of one project's from another LNK2019: unresolved external symbol error

本文关键字:项目 链接 另一个 LNK2019 错误 符号 外部 未解决 文件 一个 CPP      更新时间:2023-10-16

我有一个头文件A.h

namespace DIV
{
    int Fun();
}

源文件a.p p

namespace DIV
{
    class A
    {
    public:
        A(){}
        ~A(){}    
        int Fun();    
    };

    int A::Fun()
    {
        return 0;
    }        
}

现在我在相同解决方案的另一个项目中有另一个源文件B.cpp。

这个源代码使用了google的GTest框架。在test函数中,我使用

#include "gtest/gtest.h"
#include "A.h"
TEST(FunTest, Param)
{
    int value = DIV::Fun();
}

由于DIV::Fun()调用,我得到链接器错误。我不明白链接器错误背后的原因。

EDIT: b.p p在.exe项目中,A.h/cpp在lib项目中。

问题解决。我从这里得到了答案。总而言之,我需要将我的exe项目与包含fun()函数的lib项目链接起来。现在,使.exe项目链接到.lib项目的最简单方法可能是添加一个引用:

  • 在.exe项目的设置中,选择section列表顶部名为"Common Properties"的section。
  • 您现在应该看到.exe项目所拥有的引用列表。列表可能为空。
  • 点击对话框底部的"Add new reference"按钮,添加.lib项目作为参考
  • 当您在引用列表中选择新引用时,您将看到该引用的一组属性。确保名为"Link Library Dependencies"的属性设置为true。这将导致在构建.exe项目时,.lib项目作为输入自动添加到链接器中。

之后链接器错误消失。

使用extern和不使用extern关键字都可以工作。您需要将函数fun导出到其他模块/项目。使用使用__declspec (dllexport)

您在这里使用extern的目的是什么?由于函数默认具有外部链接,因此没有必要为此将函数标记为extern。但是,在这种情况下,这应该不会导致链接器错误。

链接器错误表明找到了函数定义,但没有正确链接到目标文件。你是如何编译和连接程序的?

编辑:

由于A.cpp与B.cpp不在同一个项目中,您需要显式地链接到A.cpp项目中的目标文件。因为它听起来像你在使用Visual Studio,你可能会发现这很有用

如何在Visual Studio的项目/解决方案之间共享代码?