MSVS 链接器找不到符号

MSVS Linker doesn't find symbol

提问人:Arolan 提问时间:7/4/2023 最后编辑:Arolan 更新时间:7/4/2023 访问量:68

问:

我在 VS2022 中使用链接器时遇到了问题。 基本上,我有一个类,“原始”文件中的一些函数和命名空间中的一些函数。有一个简短的描述(非详尽无遗)

Embree (static lib)

  • API.h的
  • Embree.h(带有getIntersection_RayHit声明)
  • API.cpp
  • Embree.cpp(有getIntersection_RayHit定义)

LibEmbree(静态库)

  • LibEmbree.h
  • LibEmbree.cpp

TestLibEmbree(可执行文件)

  • TestLibEmbree.cpp(需要两个库)

在构建项目时,我遇到以下错误(对于一些不同的功能,实际上还有更多错误):

1>TestLibEmbree.obj : error LNK2019: symbole externe non résolu "struct RayHit __cdecl getIntersection_RayHit(struct RTCSceneTy * const,float const *,float const *)" (?getIntersection_RayHit@@YA?AURayHit@@QEAURTCSceneTy@@PEBM1@Z) référencé dans la fonction "void __cdecl testPhil3(void)" (?testPhil3@@YAXXZ)

但是,这些函数的智能感知是自动完成的,我在编码时没有任何问题(没有下划线或红色)。

我在这个平台上看到了很多类似的问题,但我尝试的修复程序都没有真正解决问题。这可能是重复的,但是我发现的其他问题实际上都不是相似的(不是相同的配置或MSVS版本)。我相信我确实有“TestLibEmbree”文件(包含 testPhil3)的正确 #include,例如:

#include“../embree/embree.h”

你们中有人有解决这个问题的想法吗?

非常感谢您的帮助。

C++ Visual-Studio 链接器 未解析外部

评论

0赞 drescherjm 7/4/2023
那么在哪里:实施?struct RayHit __cdecl getIntersection_RayHit(struct RTCSceneTy * const,float const *,float const *)
0赞 drescherjm 7/4/2023
#include "../Embree/Embree.h"不是链接器错误的解决方案。如果实现此功能,解决方案可能会将库添加到中。Linker->Input->Additional Dependencies
1赞 drescherjm 7/4/2023
但是,这些函数的智能感知是自动完成的,我在编码时没有任何问题(没有下划线或红色)。Intellisense 不检测链接器错误。
0赞 drescherjm 7/4/2023
发现实际上是相似的(不是相同的配置或版本的 MSVS)这些都无关紧要。链接是一样的。
0赞 drescherjm 7/4/2023
是否链接到两个库,而不仅仅是?TestLibEmbreeLibEmbree

答:

1赞 Arolan 7/4/2023 #1

我找到了解决我问题的方法。我真的不知道为什么我的一些图书馆不需要它。

转到项目 properties->Linker->Input->Additional Dependencies,并将完整路径添加到 .lib(通常位于 x64/Release 或 /debug 文件夹中)。

然后,神奇地,它起作用了。

评论

0赞 BoP 7/4/2023
使用 Visual Studio,头文件可以包含一个 #pragma,告知链接器应链接哪个库。然后它可能会神奇地起作用。
0赞 drescherjm 7/4/2023
所以你没有关于无法打开的错误。我预计此错误以及链接器错误。如果没有,也许您在不同的文件夹中有 1 个以上的文件??Embree.libEmbree.lib