C++ 模板的目标代码是否在可执行文件和动态库中重复?
Is the object-code of C++ templates duplicated in executables and dynamic libraries?
库使用模板 class TemplCls<TArg>
,linked 可执行文件也使用它。现在,如果相同最终二进制文件(库或可执行文件)的两个源文件使用具有相同参数的模板,则只会保留模板的一个实例化。
如果动态库和可执行文件都使用模板会怎样?由于可执行文件的 linker 将(通常)收到动态库的 link 终端选项,它是否还会记住模板已经在库本身中实例化,因此,不需要,实例化成可执行文件?
What will happen if the dynamic-library and the executable both use the template?
每个人都将获得所使用的每个模板方法的副本。
你不需要问这个问题,你可以看看(在未剥离的二进制文件中):
nm -AC a.out foo.so | grep TemplCls
库使用模板 class TemplCls<TArg>
,linked 可执行文件也使用它。现在,如果相同最终二进制文件(库或可执行文件)的两个源文件使用具有相同参数的模板,则只会保留模板的一个实例化。
如果动态库和可执行文件都使用模板会怎样?由于可执行文件的 linker 将(通常)收到动态库的 link 终端选项,它是否还会记住模板已经在库本身中实例化,因此,不需要,实例化成可执行文件?
What will happen if the dynamic-library and the executable both use the template?
每个人都将获得所使用的每个模板方法的副本。
你不需要问这个问题,你可以看看(在未剥离的二进制文件中):
nm -AC a.out foo.so | grep TemplCls