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

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

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

Речь идет о платформе SUN OS.


person Leonid    schedule 05.10.2010    source источник
comment
Каждое время выполнения отличается. Вы должны быть более конкретными в отношении платформы.   -  person Martin York    schedule 05.10.2010


Ответы (3)


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

person M. Tibbits    schedule 05.10.2010

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

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

person Vaibhav    schedule 05.10.2010
comment
: O) Обыграй меня. Я сослался на ту же статью в своем ответе. Проголосуйте за скорость. - person M. Tibbits; 05.10.2010
comment
Я использую эту статью как пример для людей, начинающих программировать на C ++, и она весьма эффективна. - person Vaibhav; 05.10.2010
comment
Что произойдет, если файл был связан только статически, но затем он был связан динамически во время выполнения как часть общей библиотеки? Какой символ будет использоваться исполняемым файлом? Другими словами, возможно ли переопределить символы в исполняемом файле, связав эти символы в общую библиотеку? - person Leonid; 05.10.2010
comment
Библиотека используется только для разрешения символов, которые не были разрешены во всех объектных файлах программы. Итак, я считаю, что статическая привязка переопределит. - person Vaibhav; 05.10.2010

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

person stonemetal    schedule 05.10.2010