Что такое динамический компоновщик в программировании?

0

Я путался с концепцией компоновщика

  1. можно ли использовать компоновщик в java?
  2. Если да, то как связь происходит в развитии Android?
Теги:
operating-system

4 ответа

3

Компилятор - это программа, которая берет отдельные скомпилированные файлы и объединяет их в одну исполняемую программу.

Представьте, что у вас есть программа с двумя файлами: у одной есть основная функция, которая запускает программу, другая определяет вспомогательную функцию. Когда компилятор работает над основным файлом, он будет генерировать код, который вызывает вспомогательную функцию, даже не зная, существует ли она или что она делает. Затем компоновщик берет на себя и "разрешает" вызов функции, так что правильная функция вводится при запуске программы.

В основном существуют два типа линкеров:

  • статический компоновщик выполняется перед выполнением, создавая исполняемый файл программы или библиотеку.
  • динамический компоновщик работает во время запуска программы, просматривая необходимые символы в разных библиотеках.

Обычно концепция компоновщика применяется только к собственному коду на уровне ОС. Если вы хотите применить его к Java, вы можете сказать, что он использует только динамическую ссылку; компоновщик интегрирован в JVM.

  • 0
    ок ... растерянность растерялась .. спасибо.
1

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

Многие среды операционной системы обеспечивают динамическое связывание, то есть откладывание разрешения некоторых неопределенных символов до запуска программы. Это означает, что исполняемый код по-прежнему содержит неопределенные символы, а также список объектов или библиотек, которые будут содержать определения для них. Загрузка программы также загрузит эти объекты/библиотеки и выполнит окончательную компоновку. Динамическое связывание не требует компоновщика.

"линкер" не имеет никакого значения в java-мире. Концепция classloader, которая - с учетом массива java-байтовых кодов, может создать внутреннее представление класса, это было раньше. Теперь Java 9 имеет Linker

0

В отличие от C/C++, связанный шаг обрабатывается @runtime в Java (лениво или нетерпеливо) через JVM. Поэтому нет такой вещи, как Java-компоновщик. JVM позаботится об этом.

В Android, до Lollipop, JVM отвечала за связь. После того, как AOT появился (компиляция в режиме "впереди"), эти вещи начали приближаться к способу C/C++. Это означает, что компиляция и привязка выполняются до запуска приложения.

0

Когда выполняется компилятор Java, он создает отдельный файл байт-кода (с расширением *.class) для каждого класса или интерфейса в программе. Эти файлы образуют символическое соединение друг с другом и файл класса Java API.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню