我被要求帮助一位同事解决通用解决方案中一个项目中的神秘构建错误。构建错误发生在链接阶段,在静态库(a.lib)中定义的类构造函数在包含该a.lib的库(b.lib)中使用时找不到该类构造函数。经过仔细研究,我发现:
vcxproj 文件 ClCompile ItemGroup:
...
<ClCompile Include="Source\CMYKOVBLab.cpp" />
<ClInclude Include="Source\CMYKOBGLab.cpp" /> <--- The file is here.
<ClCompile Include="Source\CMYKOVBRGB.cpp" />
...
综上所述,链接库所需的内容已经有了,但链接错误仍然存在。
我注意到的一个奇怪的事情是,通过按 Ctrl-F7 或 a.lib 中的右键无法编译未找到类构造函数的 cpp。该选项呈灰色,但仅适用于该特定文件。此外,当我构建应该编译该文件的 a.lib 库时,它没有编译,因此没有创建目标文件。
可能是什么原因?我该如何修复它?
我正在使用 Visual Studio Professional 2015 Update 3。
在 VS 2015 中,.vcxproj 项目文件中定义的编译包含文件预计按字典顺序排列。
这在 VS 2017 中不再需要,但当它不受尊重时,VS 2015 可能会造成这种混乱。
您的同事已手动修改.vcxproj项目文件以包含该文件,但他没有遵守字典顺序。您只需从项目中删除文件然后再次将其添加回来。 Visual Studio 会将其包含在正确的位置,并且您的构建将会成功。
希望这也能帮助其他人。
您的源文件无法编译,因为它已添加到 .vcxproj 文件中的“ClInclude”元素(用于标头)中。手动或通过在 Visual Studio 中删除并读取它来将其修复为 ClCompile,然后它将编译。