2010-10-05 1 views
10

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

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

Эта платформа является SUN OS.

+0

Каждое время работы отличается. Вы должны быть более конкретными в отношении платформы. –

ответ

1

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

2

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

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

+0

: O) Побей меня. Я ссылался на ту же статью в своем ответе. Проголосуйте за скорость. –

+0

Я действительно использую эту статью в качестве примера для людей, начинающих программирование на С ++, и довольно эффективен. – Vaibhav

+0

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

0

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

 Смежные вопросы

  • Нет связанных вопросов^_^