一个项目中静态库中未解析的外部符号,而不是另一个项目中的外部符号。(C++)

Unresolved external symbol from a static library in one project, not the other. (C++)

提问人:Raiden616 提问时间:2/10/2014 更新时间:2/20/2017 访问量:21046

问:

我有一个编译良好的静态库(我们称之为 A),它依赖于另一个静态库(我们称之为 B)。

我还有项目 X,它使用库 A。因此,在 X 中,我包括 B,然后在它下面,包括 A,两者都在 stdafx.h 中。我使用 #pragma 评论来做到这一点。项目 X 编译良好。

但是,我有项目 Y,它也使用库 A。但是,即使项目 Y 的 stdafx.h 与 X 的相同,Y 也不会编译,从而产生“未解析的外部符号”错误。更奇怪的是,这些错误引用了库 B 中的函数,而不是库 A 中引用的函数。

有谁知道为什么会这样?对不起,如果我不清楚;有太多的代码,我不知道从哪里开始,包括在这里。谢谢!

C++ 可视化工作室 静态库 未解析外部

评论

0赞 Raiden616 2/10/2014
我包括一个这样的库:#include“..\liba\libraryA.h“ #pragma comment(lib,”..\\Shared\\Lib\\libraryA.lib“)

答:

7赞 cgeroux 2/10/2014 #1

我假设您正在使用 MSVS 基于 stdafx.h 标头名称。当包含静态库时,您不仅必须包含所需的头文件,而且还必须与静态库文件(即 .lib 文件)链接。我的猜测是项目 X 可以访问该 .lib 文件,而项目 Y 则不能。

也许通过 properties->common properties->References,然后“添加新引用”来指向你的两个库。

您的项目 Y 和项目 X、A、B 是否在同一个解决方案中?将这些项目添加到与 Y 相同的解决方案中可能会有所帮助。我只通过一个包含我想要包含的所有静态库的解决方案来完成此操作。就我而言,路径是由 MSVS 自动(且正确)设置的。尽管这可能需要将项目添加到解决方案中。(这将使用我上面提到的方法“properties->common properties->References”等)。

如果这是来自项目外部的 .lib 文件,则必须将其包含在“properties->Configuration Properties->Linker->Input->Additional dependencies”中,并确保其路径位于“properties->Configuration Properties->Linker->General->Additional Library Directories”中

希望能有所帮助

评论

0赞 Raiden616 2/10/2014
当我尝试这样做时,它仍然失败,但我认为这是因为在引用的属性中,“完整路径”不正确。但它是灰色的,所以我无法更改它 - 我该如何更改它?
0赞 Raiden616 2/10/2014
想出了如何改变完整的路径,但恐怕没有运气。