预编译头与DLL解决方案。无法打开预编译头文件。

10

当这个解决方案使用.lib文件而不是.dll文件时,它可以正常工作,没有错误。

除了一个项目外,我所有的项目都在使用一个名为LudoGlobal.h的预编译头文件,没有错误。我正在尝试将最后一个项目链接到这个预编译头文件(它存在于一个名为“Core”的单独项目中),但是我收到了以下错误:

错误4 致命错误C1083:无法打开预编译头文件:“....\Output\LudoSound\Debug\LudoSound.pch”:没有那个文件或目录 ludosoundmanager.cpp 1

每个.cpp文件都有这个错误。为什么会这样?我该如何解决?

我意识到LudoSound.pch不存在。我认为它可能是在LudoSound编译时创建的,是吗?


检查文件(....\Output\LudoSound\Debug\LudoSound.pch)是否存在。 - lsalamon
它没有。我想需要构建它。这似乎是阻止它的原因。 - user189320
可能是重复的问题:如何解决构建时缺少.pch文件的问题? - user276648
4个回答

25

您的项目中是否使用了“自动生成”或“使用预编译头文件”,并在一个 cpp 文件上使用了“创建预编译头文件”?后者更为高效,但我曾见过在项目中设置的逐个文件配置被意外重置,导致“stdafx.cpp”(或其他文件)不再生成预编译头文件。


1
我正在使用Use PrecompiledHeader (/Yu)和Create/Use PCH Through File Ludocore\LudoGlobal.h。LudoGlobal是我的预编译头文件。 - user189320
6
您需要前往该特定的 .cpp 文件的「属性」(而不是项目属性) 并将其设置为「创建预编译头文件」。 - Tim Sylvester
1
所以 LudoGlobal.cpp 文件被设置为“创建预编译头文件”,但是当您编译该cpp文件时,没有生成pch文件并且没有出现错误?也许中间/输出目录(或pch文件位置)不匹配,因此其他文件正在寻找它的位置与生成的位置不同。当您重新构建项目时,它是否总是首先构建 LudoGlobal.cpp?您能发布.vcproj文件吗? - Tim Sylvester
1
我也遇到了同样奇怪的问题,出现了几十个相同的错误,例如“{}”字符放置不当,但之前一切都编译得很好。这让我真想扇微软员工的耳光,说真的。 - jokoon
我和主题发起者有同样的问题,我的解决方案中有两个项目,我想让一个项目生成PCH文件,另一个项目重用它。如果我单独编译第一个(主)项目,它可以生成PCH文件而没有任何问题。但是当我尝试编译第二个项目时(依赖项、附加包含目录、PCH路径都已设置),它会从主项目中删除.PCH文件,并显示“无法打开预编译头文件”的错误信息。 - The Godfather
显示剩余2条评论

4

当我从我的项目中删除并重新添加stdafx.cpp之后,出现了这个问题。

  • stdafx.cpp需要具有属性Create PrecompiledHeader (/Yc),这将把stdafx.cpp设置为负责从stdafx.h创建.pch的文件。
  • 项目(以及其中所有文件)可以具有属性Use PrecompiledHeader (/Yu),它们可以使用由stdafx.cpp编译创建的.pch。

0

LudoSound.pch未被重新生成。只需删除它所在的文件夹并重新构建即可。


0

尝试在一个新的项目中重新构建,只复制所需的文件。


这个项目的耦合度非常高。不幸的是,我需要全部内容。 - user189320
恢复项目备份并尝试此版本。 - lsalamon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接