Как динамические c компоновщики / загрузчики разрешают символы? - PullRequest
0 голосов
/ 11 апреля 2020

Я студент CS, и я делаю проект по общим библиотекам и динамическим связям / загрузке c. Один из вопросов, на которые я должен ответить, - как символы разрешаются с помощью динамической c компоновки / загрузки. Я искал inte rnet и не смог найти ничего убедительного. Я понимаю, что разные линкеры могут по-разному разрешать символы в разных операционных системах. Я просто ищу общий ответ на основе windows; Как символы разрешаются в динамическом c связывании?

Спасибо!

1 Ответ

0 голосов
/ 11 апреля 2020

Ну, давай придерживаться Windows. Я отвечу в нескольких словах, а затем проголосую за перенос этого вопроса на сайт CS вместо основного SO.

Во-первых, динамическое связывание c может быть при запуске программы (предварительно связанный вариант) и когда код программы явно запрашивает некоторую загрузку библиотеки. Хотя там используются одни и те же библиотеки DLL, детали различаются.

Предварительно связанный вариант будет работать с так называемой библиотекой импорта, которая имеет статус c, но содержит специальные блоки (батуты AKA), которые заменяются переходами к реальному коду при динамической обработке. c loader прикрепляет реальную библиотеку (файл DLL). Для компоновщиков, которые не знают о динамической загрузке c, библиотеки импорта достаточно для обеспечения динамической c компоновки - так, как это было в DOS / Windows. Вызывающий код может не знать подробностей, если код предоставляется библиотекой stati c или dynamici c.

Для загрузки на лету используются такие методы, как LoadLibrary, чтобы загрузить библиотеку (и активировать ее). ) и GetProcAddress, чтобы получить указатель реальной реализации функции. В этом случае приложение (или другая библиотека) знает о деталях этого механизма.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...