Що таке лінкери та як вони працюють?
Компонувальники — це тип програмного забезпечення, яке з’єднує об’єктні файли та бібліотеки для створення виконуваного файлу. Вони використовуються при розробці операційних систем, програм та іншого програмного забезпечення. Компонувальники приймають об'єктні файли, згенеровані компіляторами та бібліотеками, як вхідні дані, і генерують виконуваний файл як вихідні дані.
Компонувальники виконують декілька функцій, зокрема:
1. Розпізнавання символьних посилань: якщо програма написана мовою високого рівня, вона може містити символічні посилання на функції або змінні, які не визначені в поточному вихідному коді. Компонувальник розв’язує ці посилання, знаходячи визначення функцій або змінних в інших об’єктних файлах або бібліотеках.
2. Переміщення коду та даних: коли об’єктні файли генеруються компілятором, вони можуть містити код і дані, які стосуються розташування об’єктного файлу. Компонувальник переміщує цей код і дані в правильне місце у виконуваному файлі.
3. Видалення непотрібного коду та даних: компонувальник може видаляти код і дані, які не потрібні в остаточному виконуваному файлі, зменшуючи його розмір і покращуючи продуктивність.
4. Створення виконуваного файлу: компонувальник приймає об’єктні файли та бібліотеки як вхідні дані та генерує виконуваний файл, який можна запустити на цільовій машині.
Існує кілька типів компонувальників, включаючи:
1. Динамічні компонувальники: ці компонувальники створюють виконуваний файл, який містить посилання на бібліотеки та інші об’єктні файли, від яких він залежить. Коли програма виконується, динамічний компонувальник завантажує ці залежності та вирішує будь-які символічні посилання під час виконання.
2. Статичні компонувальники: ці компонувальники створюють виконуваний файл, який містить усі вбудовані в нього залежності. Це означає, що програму можна запускати без будь-яких додаткових залежностей, але це також означає, що розмір виконуваного файлу буде більшим.
3. Спільні компонувальники: ці компонувальники створюють виконуваний файл, який містить спільні бібліотеки, які є колекціями коду та даних, які можуть використовуватися декількома програмами. Коли програму зв’язують зі спільною бібліотекою, до кінцевого виконуваного файлу включаються лише необхідні функції та змінні.
Підсумовуючи, компонувальники є важливою частиною процесу розробки програмного забезпечення, оскільки вони беруть об’єктні файли, створені компіляторами. і бібліотек і створити виконуваний файл, який можна запустити на цільовій машині. Вони виконують кілька функцій, включаючи вирішення символічних посилань, переміщення коду та даних, видалення непотрібного коду та даних і створення виконуваного файлу. Існує кілька типів компонувальників, включаючи динамічні, статичні та спільні компонувальники.