Я знаю, что эти вопросы были заданы раньше, но я все еще не могу примирить все вместе в общую картину.связывание, загрузка и виртуальная память
- статического против динамической библиотеки
- статических библиотеки их код копируются и связанные в результате исполняемого
- статических библиотеки только скопировать и соединить необходимые модули в исполняемый файл, а не вся реализация библиотеки
- Статические библиотеки не должны быть скомпилированы как PIC, поскольку они отделены от полученного исполняемого файла
- динамические библиотеки копируют и связывают в виде заглушек, которые описывают h ow для загрузки/ссылки (?) реализация функции во время выполнения
- динамические библиотеки могут быть PIC или перемещаемыми
- Почему существуют отдельные статические и динамические библиотеки? Все вышеизложенное, похоже, является задачей статического или динамического компоновщика. Зачем нужны 2 библиотеки, которые реализуют
scanf
? - (бонус # 1) что такое общая библиотека обратитесь к? Я слышал, что он используется как (1) общий зонтичный термин, синоним библиотеки, (2) непосредственно в динамической библиотеке, (3) использование виртуальной памяти для сопоставления той же физической памяти библиотеки с несколькими адресными пространствами. Можете ли вы сделать это только с динамическими библиотеками? (4), имеющих разные версии одной и той же динамической библиотеки в памяти.
- (bonus # 2) Стандартные библиотеки (libc, libC++, stdlibC++, ..) связаны динамически или статически по умолчанию? Я никогда не нужно
dlopen()
..
- статический против динамического связывания
- , как это по-другому, чем статические против динамических библиотек? Я не понимаю, почему существует не только одна библиотека, и мы используем статический или динамический компоновщик (кроме проблемы с ПОС). Вместо того, чтобы говорить о статических vs динамических библиотеках, мы должны вместо этого обсуждать более общую статическую динамическую связь?
- разрешение символа все еще выполнено во время компиляции для обоих?
- статические против динамической нагрузки
- статической нагрузки означает копирование полный исполняемый файл в ММ перед выполнением
- Динамическая загрузка означает, что только исполняемый заголовок копируется в ММ перед выполнением, дополнительные функциональные возможности загружается в MM по запросу. Как это отличается от пейджинга?
- Если исполняемый файл динамически связан, то почему он не будет динамически загружаться?
- как статическая нагрузка и динамическая нагрузка может или не может выполнить перемещение
Я знаю, что есть много вещей, которые я не совсем понимаю здесь - и я не обязательно ищет кого-то адрес каждый выпуск.Я надеюсь, перечисляя все, что меня сбивает с толку, что кто-то, кто это понимает, увидит, где провал в моем понимании находится на широком уровне, и уметь рисовать большую картину того, как эти вещи взаимодействуют друг с другом.
Если на Linux, прочитайте [статью Drepper: * Как писать общие библиотеки *) (http://people.redhat.com/drepper/dsohowto.pdf).Это длинная статья, но она отвечает на большинство ваших вопросов. –
@BasileStarynkevitch Спасибо за бумагу - я ее прочту! Знают ли различия между ОС? – user167524
Читайте также [Книга Левина: * Линкеры и загрузчики *] (http://www.iecc.com/linker/) –