VC++ 一个解决方案中的多个项目 - 链接器问题 (LNK2019)

VC++ Multiple projects in one solution - Linker issues (LNK2019)

为了尝试拥有易于维护的模块化代码,我将以前的 VC++ 解决方案中的代码拆分到单独的其他项目中。那是我可以维护单独的代码库,同时仍然能够将工作代码包含在解决方案中。我的解决方案资源管理器如下所示:

我已经关注 this(项目 config/VC++/额外包含路径)所以在这里回答,以允许 fodHelperBypass.cpp 访问 registry.cpp 中的方法。然后 VS 允许我导入 RegistryTools 项目的头文件:

事实上,如果我 Ctrl + click registry.h 导入声明 VS 将打开头文件,我可以确认它是从正确的位置加载的。 registry.cpp 文件位于同一目录中。

我还可以确认,在项目构建设置中,两个项目都设置为 x64 构建配置(在早些时候情况并非如此,VS 无法将 registry.h 定位为 RegistryTools 构建配置被设置为 x86)。 VS也能识别fodHelper.cpp文件中的外部函数,不会报任何未定义的错误。

然而,在尝试构建项目时,我收到 registry.h 和随后的 registry.cpp.

中声明的每个方法的 LNK2019 错误

我已阅读 this SO post,但我认为这不适用,因为我没有声明任何 类。此外,当我简单地将 registry.hregistry.cpp 复制并粘贴到解决方案目录中,并将它们添加到解决方案中时,代码构建没有错误。

有人可以解释一下我做错了什么导致 linker 出现这个错误吗?

编辑

我将本方案涉及的两个子项目编译为.lib个文件,达到了预期的效果。虽然我仍然很困惑,但我必须这样做才能使用另一个 C++ 项目中的方法吗?引用的函数必须是静态库的一部分吗?

从阅读第一个 link 开始,我的印象是我所要做的就是在项目配置中添加 include 目录,然后我就可以使用 RegistryTools 中的方法了。

RegistryTools 是一个包含一个具有四个函数的 cpp 文件和一个声明它们的头文件的项目。

对于任何从 Python、Java 或任何其他解释型语言转向 C++ 的程序员。 post 可能会帮助您消除一些误解。尝试从其他托管项目导入代码时,将辅助项目添加到解决方案的包含目录中是不够的。

正如@john 指出的那样,当尝试在 VC++ 解决方案中使用另一个项目的代码时,有两种选择。编译代码以导入为 .lib(静态库)文件,该文件将包含在已编译的可执行文件中。该过程描述为 here.

另一种选择是将您要导入的项目代码编译为 .dll(动态库)文件,该文件不会像 here.[=14= 所述那样编译成最终的可执行文件。 ]

这两种方法各有利弊,程序员根据自己的需要来决定。