我曾被要求帮助一位同事解决一个常见解决方案中某个项目的神秘构建错误。构建错误发生在链接阶段,静态库(a.lib)中定义的类构造函数在包含该a. lib的库(b.lib)中使用时找不到。经过仔细调查,我发现:
1.类中正确定义了构造函数。
1.该类在属于项目的cpp文件中定义。
1.如果尝试使用intellisense导航到cpp文件或类构造函数,则一切按预期进行。
vcxproj文件Cl编译项组:
...
<ClCompile Include="Source\CMYKOVBLab.cpp" />
<ClInclude Include="Source\CMYKOBGLab.cpp" /> <--- The file is here.
<ClCompile Include="Source\CMYKOVBRGB.cpp" />
...
总之,链接库所需的内容已经存在,但链接错误仍然存在。
我注意到的一件奇怪的事情是,在a. lib中按Ctrl-F7或右键无法编译类构造函数未找到的cpp。该选项是灰色的,但仅针对该特定文件。此外,当我构建应该编译该文件的a.lib库时,它没有被编译,因此没有创建目标文件。
原因是什么?我该怎么解决?
我正在使用Visual Studio专业版2015更新3。
2条答案
按热度按时间k5hmc34c1#
在VS 2015中,.vcxproj 项目文件中定义的编译包含文件应按字典顺序排列。
这在VS 2017中不再需要,但当它不被尊重时,VS 2015就会制造这种混乱。
您的同事手动修改了.vcxproj 项目文件以包含该文件,但他没有遵守字典顺序。您只需从项目中移除该文件,然后再次将其添加回来。Visual Studio将在正确的位置包含该文件,您的生成将成功。
希望这也能帮助其他人。
42fyovps2#
无法编译源文件,因为它已添加到.vcxproj文件中的“ClInclude”元素中,该元素用于标头。请手动或通过在Visual Studio中移除并重新写入它,将其修复为ClCompile,然后再进行编译。