Дублируется ли объектный код шаблонов C++ в исполняемых файлах и динамических библиотеках?
Библиотека использует шаблонный класс TemplCls<TArg>
и связанный исполняемый файл также использует его. Теперь, если два исходных файла одного и того же конечного двоичного файла (библиотека или исполняемый файл) используют шаблон с одним и тем же параметром, то будет сохранен только один экземпляр шаблона.
Что произойдет, если динамическая библиотека и исполняемый файл используют шаблон? Поскольку компоновщик исполняемого файла (как правило) получит параметр терминала для связи с динамической библиотекой, он также будет учитывать, что шаблон уже был создан в самой библиотеке, и, следовательно, нет необходимости создавать его экземпляр в исполняемом файле.?
1 ответ
Что произойдет, если динамическая библиотека и исполняемый файл используют шаблон?
Каждый получит копию каждого шаблона, который используется.
Вам не нужно задавать этот вопрос, вы можете просто посмотреть (в разархивированных двоичных файлах):
nm -AC a.out foo.so | grep TemplCls