我有一个仅标头的C ++库,该库主要由带有标头文件中所有实现的模板组成。
现在要减少编译时间,我正在尝试将其制作为.so(共享库)文件,并从应用程序外部进行链接。每次编译应用程序时,它都会始终重新编译吗?
使用g ++,在Linux中会有所作为吗?
答案 0 :(得分:3)
是,不是。
是:
每当重新编译使用模板的模板时,都需要重新编译它们。
否:
这不是因为它们将位于共享库中。他们不会。它们将仍然在标题中。
除非不是。如果可以显式实例化所需的所有内容,则可以像将其作为非模板对象一样,将它们烘焙到库中。在this page上某处有大量有关此的信息。
如果您希望减少编译时间并拥有大量模板,则通常要使用预编译头文件。