LINUX.ORG.RU

История изменений

Исправление 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. Как-то так «на пальцах»))