【问题标题】:Precompiled headers with DLL solutions. Cannot open precompiled header file带有 DLL 解决方案的预编译头文件。无法打开预编译的头文件
【发布时间】:2009-10-15 18:13:57
【问题描述】:

当此解决方案使用 .lib 文件而不是 .dll 文件时,这可以正常工作。

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

错误 4 致命错误 C1083:无法打开 预编译头文件: '....\输出\LudoSound\Debug\LudoSound.pch': 没有这样的文件或 目录 ludosoundmanager.cpp 1

对于每个 .cpp 文件。为什么是这样?我该如何解决?

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

【问题讨论】:

  • 检查文件(....\Output\LudoSound\Debug\LudoSound.pch')是否存在。
  • 它没有。我假设它需要建造。这似乎正在阻止它。

标签: c++ dll visual-studio-2005 precompiled-headers


【解决方案1】:

您是在项目上使用“自动生成”还是“使用预编译头”,在一个 cpp 文件上使用“创建预编译头”?后者效率更高,但我看到项目上的每个文件配置被意外重置,因此“stdafx.cpp”(或其他)文件不再生成预编译头。

【讨论】:

  • 我正在使用 Use PrecompiledHeader (/Yu)。通过文件 Ludocore\LudoGlobal.h 创建/使用 PCH。 LudoGlobal 是我的预编译头文件
  • 您需要有一个包含 .h 文件的 cpp 文件 (LudoGlobal.cpp),并且具有与所有其他 .cpp 文件不同的正确配置设置。
  • 您需要转到该 .cpp 文件的“属性”(与项目属性相反)并将其设置为“创建预编译头文件”。
  • 所以LudoGlobal.cpp文件设置为“创建预编译头文件”,但是当你编译那个cpp文件时,没有生成pch文件并且没有错误发生?可能中间/输出目录(或 pch 文件位置)不匹配,因此其他文件在与其生成位置不同的位置查找它。当您重建项目时,它是否总是首先构建 LudoGlobal.cpp?您可以发布 .vcproj 文件吗?
  • 我也遇到了同样奇怪的问题,有几十个相同的错误,例如 '{}"' 字符放置不当,但一切都编译得早了。这让我想打一个微软员工,认真的。
【解决方案2】:

在我从 & 中删除 stdafx.cpp 并将其重新添加到我的项目后,我遇到了这个问题。 解决方案:

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

【讨论】:

    【解决方案3】:

    尝试在新的项目中重建您的项目,仅复制所需的文件。

    【讨论】:

    • 这个项目是难以置信的紧密耦合。不幸的是,我需要这一切。
    • 恢复项目备份并尝试此版本。
    【解决方案4】:

    LudoSound.pch 未重新生成。仅删除它所在的文件夹并重新构建。

    【讨论】:

      猜你喜欢
      • 2010-11-20
      • 2012-07-09
      • 1970-01-01
      • 2020-07-19
      • 2015-01-03
      • 2015-01-05
      • 2012-09-08
      • 2011-02-25
      相关资源
      最近更新 更多