Как компоновщик узнает, какие символы должны быть разрешены во время выполнения? - PullRequest
10 голосов
/ 05 октября 2010

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

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

Платформа, о которой идет речь, - SUN OS.

Ответы [ 3 ]

2 голосов
/ 05 октября 2010

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

2 голосов
/ 05 октября 2010

Попробуйте ссылку ниже. Я надеюсь, что это отвечает на ваш вопрос

http://www.linuxjournal.com/article/6463

0 голосов
/ 05 октября 2010

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

...