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

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

本文关键字:项目 静态 C++ 另一个 符号 一个 外部      更新时间:2023-10-16

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

我还有一个项目X,它使用库A。所以在X中,我包括B,然后在它下面包括A,这两个都在stdafx.h中。我使用#pragma注释来完成这项工作。Project X编译良好。

然而,我有一个项目Y,它也使用库A。但是,即使项目Y的stdafx.h与X的stdafx.h相同,Y也不会编译,从而产生"未解决的外部符号"错误。更奇怪的是,错误指的是库B中的函数,而不是库a中引用的函数。

有人知道为什么会发生这种事吗?对不起,如果我不清楚;代码太多了,我不知道从哪里开始把它包括在这里。谢谢

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

也许可以通过属性->公共属性->引用,然后"添加新引用"来指向两个库。

您的项目Y以及项目X、A、B是否在同一解决方案中?将这些项目添加到与Y相同的解决方案中可能会有所帮助。我只是通过一个包含我想要包含的所有静态库的解决方案来完成这项工作。在我的案例中,路径是由MSVS自动(正确)设置的。尽管这可能需要将项目添加到解决方案中。(这将使用我上面提到的方法"属性->公共属性->引用"等)

如果这是一个来自项目外部的.lib文件,则必须将其包含在"属性->配置属性->链接器->输入->其他依赖项"中,并确保其路径位于"属性->配置属性->链接器->常规->其他库目录"中

希望能帮助