История изменений
Исправление PRN, (текущая версия) :
Он всё равно в каждой единице компиляции берётся из заголовочного файла и линкер вообще ничего с этой сущностью делать не может.
В разных единицах трансляции могут быть разные заголовочные файлы. Самый простой пример, это две библиотеки, объектник которых инклудил (когда был единицей трансляции) один хидер одной библиотеки, но разных версий этой библиотеки.
В одной версии это может быть
struct A {
int b;
};
А в другой
struct A {
int b;
int c;
};
Для компановщика важен размер этой структуры. Если он видит функцию foo(A a)
, то какой размер он должен учесть? Для этого и нужно указать локальную линковку. Тогда компоновщик для каждой либы использует свою версию A
. Как-то так «на пальцах»))
Исходная версия PRN, :
Он всё равно в каждой единице компиляции берётся из заголовочного файла и линкер вообще ничего с этой сущностью делать не может.
В разных единицах трансляции могут быть разные заголовочные файлы. Самый простой пример, это две библиотеки, объектник которых инклудил (когда был единицей трансляции) один хидер одной библиотеки, но разных версий этой библиотеки.
В одной версии это может быть
struct A {
int b;
};
А в другой
struct A {
int b;
int c;
};
Для компановщика важен размер этой структуры. Если он видит функцию foo(A a)
, то какой размер он должен учесть? Для указания и нужно указать локальную линковку. Тогда компоновщик для каждой либы использует свою версию A
. Как-то так «на пальцах»))