Динамічний лінкер (або динамічний компонувальник, програма динамічного зв'язування) — частина операційної системи, що і лінкує спільні бібліотеки (англ. shared libraries), необхідні виконуваному файлу для початку виконання. Таке лінкування здійснюється шляхом копіювання секцій бібліотеки з диска до оперативної пам'яті (якщо цей крок ще не було зроблено), і налаштування адрес, що посилаються на бібліотечні функції, у виконуваному файлі («релокація»). Точні механізми того, як завантажуються і лінкуються бібліотеки, повністю залежать від операційної системи і використовуваних форматів двійкових файлів.
Терміном «компонування» часто називають процес саме статичної побудови програми, в той час як динамічне лінкування відбувається коли програма запускається на виконання.
Unix-подібні операційні системи
ELF
Завантаження динамічної програми у Unix-подібній операційній системі, заснованій на форматі ELF, починається так само, як і статичної: ядро ОС [en] виконуваний файл у оперативній пам'яті. Далі починаються відмінності: у динамічній програмі присутня секція INTERPRETER, де зазначено ім'я файла динамічного лінкера (таке, як ld.so або ld-linux.so), який ядро також відображує на пам'ять і запускає. Динамічному лінкеру як параметри передаються такі важливі елементи, як фізична адреса і структура заголовку програми, її початкова адреса виконання (англ. entry point) і адреса, за якою завантажений сам лінкер. Маючи цю інформацію, лінкер при потребі завантажує потрібні динамічні бібліотеки і ініціалізує елементи таблиці символів у програмі, записуючи туди адреси бібліотечних процедур. Для прискорення роботи з таблицями використовується гешування.
Для забезпечення гнучкості динамічного компонування активно використовуються механізми GOT (Global offset table), PLT (Procedure linkage table) і . PLT дозволяє організацію так званого «лінивого лінкування», коли прив'язування до адреси бібліотечної функції здійснюється лише при зверненні до неї. Це може бути корисним, якщо динамічна бібліотека (така, наприклад, як libc) містить тисячі функцій, а програмі потрібні лише кілька з них.
Користувач сам може змінити процес пошуку динамічних бібліотек за допомогою змінних середовища, що керують роботою динамічного лінкера. Зокрема, змінна LD_LIBRARY_PATH
дозволяє вказати шлях у файловій системі, де бібліотеки шукатимуться у першу чергу.
Імена файлів бібліотек, з якими лінкер вже мав справу, і шляхи доступу до них зберігаються у спеціальному файлі кешування (ld.so.cache
).
Microsoft Windows
Динамічно-приєднувані бібліотеки (DLL) — реалізація концепції спільних бібліотек, здійснена Microsoft у операційних системах Microsoft Windows і (OS/2). DLL у Windows можуть крім коду і даних містити також ресурси.
OS/360 і наступники
У (OS/360) при написанні програм на асемблері динамічне лінкування здійснюється за допомогою макроса LINK
, що містить інструкцію виклику супервізора ОС. У результаті потрібний бібліотечний модуль стає доступним програмі. У JCL імена бібліотек можуть вказуватися у операторах STEPLIB
або JOBLIB
(доступні лише для конкретного екземпляру виконання програми), а також (при старті системи) у команді LINKLIST / PARMLIB, або у спеціальній області «link pack area», де вказуються реентрантні модулі, які система має завантажити при своєму запуску.
Multics
У операційній системі Multics усі файли, включно з виконуваними, є сегментами. Виклик підпрограми, яка не є частиною поточного сегмента, призводить до спеціальної виняткової ситуації, обробник якої знаходить потрібний сегмент (у оперативній пам'яті або на диску), і додає його до адресного простору процесу, що виконується. Динамічне лінкування є нормальним режимом роботи системи; статичне компонування програми (за допомогою інструменту binder) є радше винятком.
Див. також
Джерела
- Levine, John R. (2000). 10. Dynamic linking and loading. (англ.). Morgan Kaufmann. ISBN . Архів оригіналу за 8 жовтня 2011. Процитовано 25 лютого 2020.
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Dinamichnij linker abo dinamichnij komponuvalnik programa dinamichnogo zv yazuvannya chastina operacijnoyi sistemi sho i linkuye spilni biblioteki angl shared libraries neobhidni vikonuvanomu fajlu dlya pochatku vikonannya Take linkuvannya zdijsnyuyetsya shlyahom kopiyuvannya sekcij biblioteki z diska do operativnoyi pam yati yaksho cej krok she ne bulo zrobleno i nalashtuvannya adres sho posilayutsya na bibliotechni funkciyi u vikonuvanomu fajli relokaciya Tochni mehanizmi togo yak zavantazhuyutsya i linkuyutsya biblioteki povnistyu zalezhat vid operacijnoyi sistemi i vikoristovuvanih formativ dvijkovih fajliv Terminom komponuvannya chasto nazivayut proces same statichnoyi pobudovi programi v toj chas yak dinamichne linkuvannya vidbuvayetsya koli programa zapuskayetsya na vikonannya Unix podibni operacijni sistemiELF Zavantazhennya dinamichnoyi programi u Unix podibnij operacijnij sistemi zasnovanij na formati ELF pochinayetsya tak samo yak i statichnoyi yadro OS en vikonuvanij fajl u operativnij pam yati Dali pochinayutsya vidminnosti u dinamichnij programi prisutnya sekciya INTERPRETER de zaznacheno im ya fajla dinamichnogo linkera take yak ld so abo ld linux so yakij yadro takozh vidobrazhuye na pam yat i zapuskaye Dinamichnomu linkeru yak parametri peredayutsya taki vazhlivi elementi yak fizichna adresa i struktura zagolovku programi yiyi pochatkova adresa vikonannya angl entry point i adresa za yakoyu zavantazhenij sam linker Mayuchi cyu informaciyu linker pri potrebi zavantazhuye potribni dinamichni biblioteki i inicializuye elementi tablici simvoliv u programi zapisuyuchi tudi adresi bibliotechnih procedur Dlya priskorennya roboti z tablicyami vikoristovuyetsya geshuvannya Dlya zabezpechennya gnuchkosti dinamichnogo komponuvannya aktivno vikoristovuyutsya mehanizmi GOT Global offset table PLT Procedure linkage table i PLT dozvolyaye organizaciyu tak zvanogo linivogo linkuvannya koli priv yazuvannya do adresi bibliotechnoyi funkciyi zdijsnyuyetsya lishe pri zvernenni do neyi Ce mozhe buti korisnim yaksho dinamichna biblioteka taka napriklad yak libc mistit tisyachi funkcij a programi potribni lishe kilka z nih Koristuvach sam mozhe zminiti proces poshuku dinamichnih bibliotek za dopomogoyu zminnih seredovisha sho keruyut robotoyu dinamichnogo linkera Zokrema zminna LD LIBRARY PATH dozvolyaye vkazati shlyah u fajlovij sistemi de biblioteki shukatimutsya u pershu chergu Imena fajliv bibliotek z yakimi linker vzhe mav spravu i shlyahi dostupu do nih zberigayutsya u specialnomu fajli keshuvannya ld so cache Microsoft WindowsDokladnishe Dynamic link library Dinamichno priyednuvani biblioteki DLL realizaciya koncepciyi spilnih bibliotek zdijsnena Microsoft u operacijnih sistemah Microsoft Windows i OS 2 DLL u Windows mozhut krim kodu i danih mistiti takozh resursi OS 360 i nastupnikiU OS 360 pri napisanni program na asembleri dinamichne linkuvannya zdijsnyuyetsya za dopomogoyu makrosa LINK sho mistit instrukciyu vikliku supervizora OS U rezultati potribnij bibliotechnij modul staye dostupnim programi U JCL imena bibliotek mozhut vkazuvatisya u operatorah STEPLIB abo JOBLIB dostupni lishe dlya konkretnogo ekzemplyaru vikonannya programi a takozh pri starti sistemi u komandi LINKLIST PARMLIB abo u specialnij oblasti link pack area de vkazuyutsya reentrantni moduli yaki sistema maye zavantazhiti pri svoyemu zapusku MulticsU operacijnij sistemi Multics usi fajli vklyuchno z vikonuvanimi ye segmentami Viklik pidprogrami yaka ne ye chastinoyu potochnogo segmenta prizvodit do specialnoyi vinyatkovoyi situaciyi obrobnik yakoyi znahodit potribnij segment u operativnij pam yati abo na disku i dodaye jogo do adresnogo prostoru procesu sho vikonuyetsya Dinamichne linkuvannya ye normalnim rezhimom roboti sistemi statichne komponuvannya programi za dopomogoyu instrumentu binder ye radshe vinyatkom Div takozhPeklo zalezhnostej DLL hellDzherelaLevine John R 2000 10 Dynamic linking and loading angl Morgan Kaufmann ISBN 978 1 55860 496 4 Arhiv originalu za 8 zhovtnya 2011 Procitovano 25 lyutogo 2020