如果将C ++应用程序与繁琐的模板库链接在一起,是否在编译应用程序时重新编译了库中的所有模板定义?

时间:2019-01-11 12:46:47

标签: c++ g++

我有一个仅标头的C ++库,该库主要由带有标头文件中所有实现的模板组成。

现在要减少编译时间,我正在尝试将其制作为.so(共享库)文件,并从应用程序外部进行链接。每次编译应用程序时,它都会始终重新编译吗?

使用g ++,在Linux中会有所作为吗?

1 个答案:

答案 0 :(得分:3)

是,不是。


是:

每当重新编译使用模板的模板时,都需要重新编译它们。

否:

这不是因为它们将位于共享库中。他们不会。它们将仍然在标题中。

除非不是。如果可以显式实例化所需的所有内容,则可以像将其作为非模板对象一样,将它们烘焙到库中。在this page上某处有大量有关此的信息。


如果您希望减少编译时间并拥有大量模板,则通常要使用预编译头文件