Как линкер знает, какие символы должны быть разрешены во время выполнения?

Как линкер знает, какие символы должны быть разрешены во время выполнения? В частности, меня интересует, какие данные обмениваются общими объектными файлами, которые инструктируют компоновщик для разрешения символов во время выполнения. Как разрешение динамического символа работает во время выполнения, то есть какой исполняемый файл будет выполнять поиск символа и в случае, если будут определены несколько символов с таким же именем?

Что произойдет, если файл был связан только статически, но затем он динамически связан во время выполнения как часть общей библиотеки? Какой символ будет использоваться исполняемым файлом? Другими словами, возможно ли переопределить символы в исполняемом файле, связав эти символы с общей библиотекой?

Рассматриваемая платформа - SUN OS.

Ответ 1

Ознакомьтесь с этой статьей из Linux Journal. Для получения дополнительной информации - возможно, специально связанной с Windows, AIX, OSx и т.д. - я бы рекомендовал статью Википедии о компоновщике (вычислениях) и ссылки в нем.

Ответ 3

Если файл статически связан, не существует разрешения времени выполнения. Если общий объект ссылается на эту же библиотеку динамически или статически, версия, связанная с библиотекой, будет выполнять только код, исполняемый в библиотеке. Это может вызвать проблемы, если вы ссылаетесь на две разные версии той же библиотеки, которые несовместимы и сдвигают данные вперед и назад.