【问题标题】:Unresolved external symbol from a static library in one project, not the other. (C++)一个项目中的静态库中未解析的外部符号,而不是另一个。 (C++)
【发布时间】:2014-03-07 14:04:08
【问题描述】:

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

我还有项目 X,它使用库 A。所以在 X 中我包含 B,然后在它下面包含 A,两者都在 stdafx.h 中。我使用#pragma cmets 执行此操作。 Project X 编译良好。

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

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

【问题讨论】:

  • 我包含一个这样的库:#include "..\liba\libraryA.h" #pragma comment(lib,"..\\Shared\\Lib\\libraryA.lib")

标签: c++ visual-studio static-libraries unresolved-external


【解决方案1】:

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

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

您的项目 Y 以及项目 X、A、B 是否在同一个解决方案中?将这些项目添加到与 Y 相同的解决方案中可能会有所帮助。我只做了一个包含我想要包含的所有静态库的解决方案。在我的情况下,路径是由 MSVS 自动(并且正确)设置的。尽管这可能需要将项目添加到解决方案中。 (那将使用我上面提到的方法“属性->通用属性->参考”等)。

如果这是来自项目外部的 .lib 文件,则必须将其包含在“properties->Configuration Properties->Linker->Input->Additional dependencies”中,并确保其路径位于“properties->配置属性->链接器->常规->附加库目录”

希望有帮助

【讨论】:

  • 当我尝试这样做时它仍然失败,但我认为这是因为在引用的属性中,“完整路径”不正确。但它是灰色的,所以我无法更改 - 我该如何更改?
  • 想出了如何更改完整路径,但恐怕没有运气。
猜你喜欢
  • 1970-01-01
  • 2013-11-10
  • 1970-01-01
  • 2018-08-02
  • 2013-03-11
  • 2020-07-01
  • 2012-02-25
  • 2022-08-03
  • 1970-01-01
相关资源
最近更新 更多