问题标签 [precompiled-headers]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
664 浏览

g++ - - 使用 g++ 包含一个预编译的头文件

我试图通过添加-include myprecompiledheader.h到我的编译器标志来将预编译的头文件包含到我的项目中。但是,当我在 GCC 中使用 -H 选项时,此文件不会显示在列表中,因此我无法查看“!” 或“x”来确定我的 .pch 文件是否正在被使用。有什么方法可以判断我的预编译头文件是否正在被使用-include

0 投票
2 回答
9112 浏览

c++ - 使用命名空间创建全局函数,但得到多重定义的符号错误

这些函数是我的大多数程序对象将使用的实用程序类型的东西。我想将它们放在一个命名空间中并让它们全局化。这个命名空间在头文件中定义,然后添加到我的预编译头文件中。然而到目前为止,我已经在 2 个不同的对象中使用了这个命名空间中的函数,并且编译器在这 2 个对象上抛出了多重定义的符号错误。

命名空间文件

和我的预压缩头

链接器错误消息:

Manager.obj : error LNK2005: "int __cdecl Utils::GetRandomBetween(int,int)" (?GetRandomBetween@Utils@@YAHHH@Z) already defined in Bot.obj stdafx.obj : error LNK2005: "int __cdecl Utils::GetRandomBetween(int,int)" (?GetRandomBetween@Utils@@YAHHH@Z) already defined in Bot.obj c:\users\lee\documents\visual studio 2010\Projects\AI\Debug\AI.exe : fatal error LNK1169: one or more multiply defined symbols found

还可能值得注意的是,在我的 Manager 类标题中,我转发了声明 Bot. 与 Village 类标题相同。

0 投票
1 回答
115 浏览

c++ - WxWidgets 编译帮助

我尝试编译 WxWidgets (Latest; VC9; Release),但它只输出 *.obj 和 *.pch 文件,没有 *.lib 文件。我知道 *.obj 文件是对象文件,而 *.pch 文件是预编译头文件,但是我是从 C++ 引用它们还是我必须以某种方式将它们转换为 *.lib 文件。

顺便说一句,我从未使用过 *.pch 并且对它们一点也不熟悉。我现在才使用 C++ 几个月...

0 投票
1 回答
32826 浏览

c++ - 不是类或命名空间名称

我知道这个问题之前已经被问过和回答过,但似乎没有一个解决方案对我有用,而且我的编译器对这个错误表现得很奇怪。

当我尝试编译我的代码时,会遇到许多错误,例如:

我之前在编译我的项目时遇到过这种错误,但它神秘地消失了。我试图解决这个问题,过了一段时间,在我恢复所有更改后它又开始工作了。

我认为这可能是我的预编译头文件的问题,因为在我尝试修复我的 PCH 无法正常工作的错误后弹出此错误。

这是我的代码(我知道它的设计不是很好,只是想让它现在工作:P):

标准Afx.h

目标.h

目标.cpp

目标列表.h

目标列表.cpp

0 投票
3 回答
1307 浏览

objective-c - 处理预编译的头文件给了我我不明白的错误

我正在 OS X Lion 上使用 Xcode 4.1 和 Pixelwave 构建 iOS 4.2+ 游戏。

在开发过程中的某个时刻,我对项目进行了清理,自从我无法编译该项目以来,我在处理 PCH 时遇到了大量错误。这是调用和报告的前几组错误:

据我所知,触发此问题的构建设置没有任何变化。

这是我在尝试调试时尝试过的,但未成功:

  • 恢复到我之前编译好的项目的先前提交。
  • 查看 Pixelwave 的新副本。
  • 恢复到我之前编译好的项目的第一次提交。
  • 删除项目的 DerivedData 子目录。
  • 重新启动 Xcode。
  • 重新启动。
  • 卸载并重新安装开发工具(我越来越绝望)。

这些都没有帮助——我仍然每次都遇到同样的错误。对于导致这种行为的原因,我束手无策。我什至不知道从哪里开始寻找。

0 投票
3 回答
635 浏览

c++ - 库构建器的预编译头文件使用

根据这个答案boost 和 STL 头文件属于预编译的头文件stdafx.h在 MSVC 世界中)。因此,我更改了动态链接库项目的标头,并将所有 STL/Boost 标头移动到stdafx.h我的项目中。

现在我的优势在于减少了编译时间,但是我的库的所有用户都遇到了构建错误(例如,未知的 boost::scoped_ptr...),因为缺少包含(现在已移至我的stdafx.h.


有什么办法可以解决这个困境?

我希望减少编译时间在包含我的头文件后编译错误对于 dll 的任何用户都是不可接受的。

这有帮助吗?

  • 保留所有包含指令,但在我的“stdafx.h”中复制它们?由于 stdafx.h 总是首先包含在我项目的任何 cpp 文件中,所以我应该没问题,并且用户不会收到任何错误。或者,如果在一个翻译单元中出现多个包含相同标题的内容(有标题保护),我是否会失去速度优势?

感谢您的任何提示!

0 投票
3 回答
8110 浏览

c++ - #pragma hdrstop without parameter 在多个文件中使用时有什么作用?

#pragma hdrstop将(无文件名参数)放入几个源(cpp)文件的实际价值(“它做什么”)是什么?

请注意,MSDN 文档(再一次)对我来说就像泥巴一样清晰。

编辑/注意:我问这个,因为这个答案和它链接的文章似乎建议这样做。但我不明白每个编译单元都有一个单独的 pch 文件有什么好处。

0 投票
1 回答
816 浏览

c++ - Linux 上的预编译头警告(太短而不能成为 PCH 文件)

我的项目中有一个名为 Core.h 的头文件,我将其用作预编译头文件:

这会创建一个名为 Core.h.gch 的文件

*#include "Core.h"是模块中每个源文件的第一个指令。

在 OS X 上,它工作得很好——我的项目编译得很好,而且编译得非常快。

然而,在 Linux 上,我的 100 多个文件中有 7 个给出以下警告:

警告:Core.h.gch:太短而不能成为 PCH 文件

就像所有其他源文件一样,#include "Core.h"这些文件的第一行。

有没有人遇到过这个?可能的原因?为什么只有少数包含 PCH 的文件会发出警告?

我在 Linux 上使用 gcc 版本 4.1.2,在 OSX 上使用 4.2.1

谢谢!

编辑:

这基本上是我构建库的方式:

0 投票
2 回答
2625 浏览

c++ - 每次制作都会创建预编译的头文件?

我有一个非常简单的makefile,它基本上执行以下操作:

我的问题是,我第一次制作时,创建了Core.h.gch并构建了项目。没关系。

但是,即使什么都不做,再次运行 make 将重新创建 Core.h.gch 并重新编译所有内容。

如果我没有预编译的标头,则 make 表现良好(如果没有任何更改,则不会重建任何内容,并且仅在进行修改时重建必要的内容)

但我真的很想拥有那个预编译的头文件,有什么我做错了吗!?

编辑:

建议如下:

但它仍然每次都会被创建:(

0 投票
0 回答
776 浏览

c++ - 使用来自不同项目的预编译头文件

我在 Visual Studio 2010 中有两个项目,我想共享预编译的头文件输出 .pch(i) 文件:一个构建它,另一个应该只使用它。

在清理和重建 Project1 之后,将创建 .pchi 文件。

Rebuild Project2 做了一件奇怪的事情,它删除了 .pchi 文件,然后抱怨找不到它进行编译。

我应该改变什么来停止这种行为(可能在文件“Microsoft.Cpp.x64.Intel C++ Compiler XE 12.0.targets”中?)?

我已将文件设置为只读,然后 Project2 Build 当然会抱怨:

C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\x64\PlatformToolsets\Intel C++ Compiler XE 12.1\Microsoft.Cpp.x64.Intel C++ Compiler XE 12.1.targets(84,5):错误 MSB3061:无法删除文件“ .pchi”。拒绝访问路径“ .pchi”。

在第 84 行,.targets 文件有

< 删除条件="'%(ClCompile.DebugInformationFormat)' != '' and '%(ClCompile.DebugInformationFormat)' != 'OldStyle' and '%(ClCompile.ProgramDataBaseFileName)' != '' and !Exists(%( ClCompile.ProgramDataBaseFileName)) 和 '%(ClCompile.UseMSVC)'!='true' 和 '%(ClCompile.InterproceduralOptimization)'!='MultiFile' 和 '%(ClCompile.LevelOfStaticAnalysis)'!='Brief' 和 '% (ClCompile.LevelOfStaticAnalysis)'!='Medium' 和 '%(ClCompile.LevelOfStaticAnalysis)'!='Verbose'" Files="%(ClCompile.PrecompiledHeaderOutputFile)i" />