我有一个编译好的静态库(让我们称之为A),它依赖于另一个静态库(让我们称之为B)。
我也有项目X,它使用库A.所以在X中我包括B然后,在它下面,包括A,都在stdafx.h中。我这样做是使用#pragma comments。项目X编译得很好。
然而,我有项目Y也使用库A.但是,即使项目Y的stdafx.h是X的IDENTICAL,Y也不编译,给出“未解析的外部符号”错误。更奇怪的是,错误是指来自库A中引用的函数的库B中的函数。
有谁知道为什么会发生这种情况?对不起,如果我不清楚;有这么多代码我不知道从哪里开始包含它。谢谢!
答案 0 :(得分:5)
我将假设您正在使用基于stdafx.h标头名称的MSVS。包含静态库时,您不仅需要包含所需的头文件,还必须链接静态库文件,即.lib文件。我的猜测是项目X可以访问该.lib文件,而项目Y没有。
也许通过properties-> common properties->引用然后“添加新引用”指向您的库。
你的项目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”
希望有所帮助
答案 1 :(得分:0)
今天我遇到了lib中未解析符号的问题,我不明白为什么。
解决方案是将我的所有* .c和* .h文件都包含在我的项目中。 (我最近刚将它们复制到项目文件夹中,但没有将它们添加到项目中) 该项目在没有错误编译之前......
我不确定那是你的问题,但是因为这是我用Google搜索时发现的第一件事,无论如何我都会在这里发布。