使用 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的主要内容,如果未能解决你的问题,请参考以下文章

预编译标准库头文件 - C++

gcc的预编译选项-D

gcc的预编译选项-D

谁能告诉我预编译gcc -E .c文件,会有如下的信息,前面4行代表啥意思?

GCC - 多个预编译头文件和特定路径

ubuntukylin基础 使用gcc编译一个C语言 helloworld程序 预编译 汇编 编译 链接