使用 GCC 预编译的 STL
Posted
技术标签:
【中文标题】使用 GCC 预编译的 STL【英文标题】:Precompiled STL with GCC 【发布时间】:2014-06-19 08:29:20 【问题描述】:有一个包含许多标准库头文件的代码。代码位于一个文件中,我无法在该项目中创建任何其他 C++ 源文件(原文如此)。我想使用预编译的头文件来提高构建过程的性能。有两个问题
-
尝试在
vector
上使用this guide,我遇到了file format not recognized
错误。我应该设置什么标志来显示 gcc
这是一个头文件?
official guide 中有一句话说“在特定的编译中只能使用一个预编译的头文件”。那么如何一次预编译多个头文件呢?
(也欢迎任何批处理/shell 脚本。)
【问题讨论】:
一个预编译头文件可以包含多个头文件。这样您就可以将所有 stl 标头包含在一个标头中并使用它 【参考方案1】:你没有忘记使用 -x 选项来编译你的预编译头文件吗?接下来,如果您想预编译标准库的模板 - 根据定义,这是不可能的。使用 C++11,您可以在某些特定翻译单元中为某些类型参数显式实例化一些模板。从预编译的头文件中你可以指定
extern template void foo<char>(...)
如果您尝试对模板使用预编译的标头,它们有什么用?您的预编译头文件必须是一组其他包含/宏定义/内联函数以及可以安全地包含在多个翻译单元中的所有其他内容。然而 - 每个库/二进制文件只有一个预编译头文件。
【讨论】:
AFAIK,预编译的标头不是翻译单元。外部模板中不需要。-x
选项是对问题第一部分的回答。它应该像g++ -x c++-header -std=c++11 ...\vector
它实际上是翻译单元,因为普通的包含按原样包含在文本中,而不是相应的“#include”指令。
一次预编译多个头文件 - 将所有感兴趣的头文件包含到必须预编译的单个头文件中。
并预编译这个单一的头文件。以上是关于使用 GCC 预编译的 STL的主要内容,如果未能解决你的问题,请参考以下文章