使用来自另一个文件夹的源代码时未解决的外部问题

Posted

技术标签:

【中文标题】使用来自另一个文件夹的源代码时未解决的外部问题【英文标题】:Unresolved Externals when using source code from another folder 【发布时间】:2012-03-30 13:35:23 【问题描述】:

我会尽可能地解释我的问题。

基本上我在一个 Visual Studio 2010 解决方案中有两个项目。一个项目是我正在制作的游戏引擎的源代码,它编译成.dll。第二个项目只包含 main.cpp 文件,其中包含来自 Engine 项目的文件。我已经设置了测试项目以包含引擎项目的源目录(头文件和 cpp),但我得到了未解决的外部问题。我所有的引擎类都在一个命名空间内。

main.cpp

#include <Engine/input.h>
#include <Engine/graphics.h>
#include <Engine/sound.h> 

using namespace Engine; 

int main()

    Renderer* renderer = new Renderer();
    etc.

然后在我的代码中它看起来像

Graphics.h

namespace Engine

    class Renderer 
    
         void draw();
    


Graphics.cpp

namespace Engine

    void Renderer::draw()
    
    

上述引擎的源代码位于 main.cpp 的单独文件夹中。我已经尝试将所有代码放入 main.cpp 的文件夹中,我可以毫无问题地编译。将它放在另一个文件夹中会导致我在 main.cpp 中使用的功能无法解析。

感谢您的帮助!

【问题讨论】:

【参考方案1】:

首先你需要通过_declspec(dllexport)导出符号。

namespace Engine

    _declspec(dllexport) class Renderer 
    
         void draw();
    

当您导入标头时,您告诉它导入带有_declspec(dllimport) 的符号。这种双重功能可以通过宏来实现。

其次,需要在包含main.cpp的项目的项目设置中包含生成的.lib文件。

【讨论】:

酷,感谢您的回答。无论如何,我将不得不尽快这样做。但我想做的只是让测试项目使用引擎项目文件夹的源代码(未编译成 dll)。 我可以补充一点,问题还没有解决,我实际上并不想使用任何 dll。只是为了使用来自另一个文件夹的源代码。 @rocklobster 源码编译了吗? 该项目在我构建它时编译源代码,它到了最后,我遇到了一堆未解决的外部问题。【参考方案2】:

您似乎没有在 Graphics.cpp 中包含 Graphics.h

【讨论】:

对不起,我已经包含了它,但是我没有在我的问题中输入它(实际的源文件太大,我不想淹没页面)。 这显然不是这里的问题。这是链接器错误,而不是编译器错误。 正确,我只是想将另一个文件夹中的源代码包含到我当前的测试项目中,我得到了这些未解决的外部问题。我怀疑它与命名空间有关(在此之前我从未费心使用它们)。

以上是关于使用来自另一个文件夹的源代码时未解决的外部问题的主要内容,如果未能解决你的问题,请参考以下文章

尝试使用外部库时未定义的引用

使用控件时未加载 UserControl 中的外部图像

构建新的 Azure Fabric 服务时未找到清单文件

访问另一个文件时未定义 fetch

ReferenceError: 导入外部js文件时未定义Vue

React - 使用外部 URL 时未定义地图功能