Size: a a a

Compiler Development

2021 May 26

P

Pavel in Compiler Development
От того как сделана виртуальная машина, может и не перегонять в машинный
источник

P

Pavel in Compiler Development
В целом да
источник

JF

Jorik Fat in Compiler Development
окей, давайте перефразирую вопрос:
компановка от связывающей загрузки отличается тем, что компановка делать только 1 раз?

И соответственно в скомпанованую программу нельзя добавить плагины, так как они должны добавляться в runtime
(отдельные процессы не в счет)
источник

K

Kir in Compiler Development
Статическая компоновка делается 1 раз, динамические либы грузятся при каждом запуске, если они ещё не загружены.
источник

JF

Jorik Fat in Compiler Development
в программу со статической компановкой можно подключить плагины?
источник

K

Kir in Compiler Development
Зависит ом многого
источник

K

Kir in Compiler Development
Можно часть слинковать статически и подрубить .so или .dll
источник

JF

Jorik Fat in Compiler Development
но это подключаемая часть все равно будет сделана через связывающий загрузчик
источник

AM

Andrew Mikhaylov in Compiler Development
Верно. В том же линуксе вообще любые исполняемые файлы запускаются с помощью динамического загрузчика ld-linux, который (грубо говоря) отвечает за вычитку соответствующей секции ELF-файла, загрузку перечисленных библиотек, "долинковку" нужного для выпонения и уже после этого передачи управления загруженному приложению.
источник

JF

Jorik Fat in Compiler Development
т.е. если приложение целиком скомпановано - то плагины к нему невозможно подключить?
источник

JF

Jorik Fat in Compiler Development
без рекомпиляции
источник

AM

Andrew Mikhaylov in Compiler Development
Я плохо понимаю, что такое "приложение целиком скомпановано", потому мне трудно ответить на вопрос. Во-первых, при работе в запущенной ОС почти всегда есть тот самый динамический загрузчик, который догрузит динамические библиотеки при запуске, во-вторых, никто не мешает в рантайме найти и загрузить динамическую библиотеку, после чего найти и вызвать любой символ в ней.
источник

JF

Jorik Fat in Compiler Development
он то дозагрузит, но как само приложение получит к ним доступ, если в нем все связи будут решены?
источник

AM

Andrew Mikhaylov in Compiler Development
Прошу прощения, я не понимаю суть этой мысленной гимнастики, потому таки не буду в ней дальше участвовать.
источник

JF

Jorik Fat in Compiler Development
спасибо, что частично помогли разобраться
источник

П

Пух in Compiler Development
Динамические библиотеки. По сути статической линковкой ты их кол-во к минимуму сводишь
источник

JF

Jorik Fat in Compiler Development
ну вот если я все соберу статической линковкой. Можно ли будет реализовать плагины без связывающего загрузчика?
источник

JF

Jorik Fat in Compiler Development
как я понял компановщик это тот же связывающий загрузчик, но который применяется только 1 раз на этапе компиляции. Больше он нигде не используется
источник

П

Пух in Compiler Development
Вряд ли
источник

П

Пух in Compiler Development
Ну типа нативные плагины без костылей каких-нибудь не получится. А так плагины можно и на луа сделать)
источник