Linux бібліотеки

Практично всі програми Linux використовують одні і ті ж стандартні функції, наприклад для звернення до файлів, виведення зображення на екран, підтримки Хіт. д. Було б недоцільно записувати всі ці функції прямо в коді не найбільшою програми - тоді файли програм стали б гігантськими. Замість цього більшість програм Linux звертається до так званим розділяються бібліотекам: при виконанні програми автоматично завантажуються і необхідні бібліотеки. У чому полягає перевага? Якщо кілька програм використовують функції однієї і тієї ж бібліотеки, то цю бібліотеку необхідно завантажити лише один раз.

Бібліотеки відіграють ключову роль, коли визначається, які програми можна буде виконувати на комп'ютері. Якщо не вистачає однієї-єдиної бібліотеки (або в наявності є тільки стара версія), то прямо під час запуску програми виводиться повідомлення про помилку. Щоб в таких випадках ви не залишалися напризволяще в надрах Linux, в цьому розділі я надам базову інформацію по бібліотеках.

Динамічна зв'язок програм за допомогою посилань. Більшість програм Linux при роботі звертаються до поділюваних бібліотек. Так економиться місце на диску (адже виконавчі файли програм компактні) і менше завантажується оперативна пам'ять (оскільки один і той же код не потрібно вантажити багаторазово). Зауваження для програмістів, які працюють з Windows: колективні бібліотеки можна порівняти з DLL - динамічно підключаються бібліотеками.

Формати і версії бібліотек


Протягом історії Linux в бібліотеки не раз вносилися зміни, які були настільки ж фундаментальні, як і несумісні один з одним. До числа таких змін відноситься, наприклад, заміна формату A.OUT на ELF або заміна бібліотеки libc 5 версії на glibc версії 2.п, причому до останньої можна звертатися і як libc 6 (в даний час актуальна версія glibc 2.10).

В обох випадках заміни бібліотек були технічно виправдані. Нові формати або версії дозволяють з більшою легкістю управляти бібліотеками та функціями, забезпечують більш повну сумісність різних платформ Linux (Intel, Sun-Sparc, DEC-Alpha) та ін.

Однак при заміні виникають проблеми, пов'язані з тим, що скомпільовані програми можуть виконуватися тільки тоді, коли в системі встановлені потрібні бібліотеки і система може їх знайти. Якщо ви спробуєте виконати програму для glibc в старому дистрибутиві, в якому glibc не підтримується, то отримаєте загадкове повідомлення про помилку такого змісту:

ПРИМІТКА


Через те, що в даний час є проблеми з підтримкою бібліотеки glibc, яка готується до виходу версія Debian Squeeze імовірно буде використовувати не оригінальну бібліотеку glibc, а повністю сумісну бібліотеку eglibc.

Автоматичне завантаження бібліотек


Якщо ви працюєте з Linux тільки як користувач, а не як програміст, то ви зіткнетеся з бібліотеками лише в той момент, коли якийсь із них буде бракувати. Зазвичай такі проблеми виникають, якщо ви поступово встановлюєте нову програму. При спробі запустити її виводиться повідомлення про помилку, яке вказує на відсутність певної бібліотеки. Часто актуальні версії програм посилаються на новітні версії відповідних бібліотек, які у вас, можливо, ще не встановлені. Зі старими програмами імовірний прямо протилежний випадок. Можливо, вони ще посилаються на застарілі бібліотеки, які вже не підтримуються у вашому дистрибутиві.

Визначення переліку бібліотек


Команда ldd передається як параметр, який додається до повного імені програми. У відповідь ldd перераховує всі бібліотеки, які потрібні для виконання програми. Крім того, вказується, де знаходиться відповідна бібліотека і які бібліотеки доступні тільки в застарілої версії.


Що стосується програм X-, KDE- і Gnome, тут список бібліотек набагато ширший. Саме з цієї причини ці програми запускаються досить довго.

назви бібліотек

Коротка інформація про найменування бібліотек: закінчення .so вказує, що ми маємо справу з розділяється бібліотекою, окончаніе.а визначає статичну бібліотеку. Наступна цифра вказує номер основною версією. Наприклад, ls вимагає бібліотеку libc версії 6.

Каталоги, в яких зазвичай розташовуються бібліотеки (наприклад, / lib, / usr / lib, / usr / local / lib, / usr / XHR6 / lib і / opt / lib), часто містять посилання, що зв'язують основну версію бібліотеки з тією, що встановлена ​​на вашому комп'ютері. Так, для cp (див. Вище) потрібно бібліотека ld-linux-x68-64.so.2. Але насправді на комп'ютері встановлена ​​версія ld-2.9.so, сумісна «знизу вгору».

запуск програм

При запуску програм потрібно знайти і завантажити всі бібліотеки - за це відповідає так званий компоновщик часу виконання. При цьому враховуються всі каталоги, зазначені в змінної оточення LD LIBRARY PATH. Ці каталоги поділяються двокрапкою.

Крім того, компонувальник інтерпретує файл /etc/ld.so.cache. Це двійковий файл, який містить всю важливу інформацію про бібліотеку (номери версій, шляхи доступу і т. Д.). Він потрібен тільки для того, щоб заощадити час, яке компоновщик в іншому випадку витратив би на пошук бібліотек.

Файл /etc/ld.so.cache створюється програмою ldconfig, яка, в свою чергу, інтерпретує /etc/ld.so.conf. У цьому файлі зазвичай міститься список всіх бібліотечних каталогів або список посилань на інші файли з каталогами (каталоги / lib і / usr / lib враховуються в будь-якому випадку і тому відсутні в ld.so.conf або інших конфігураційних файлах. Якщо крім / lib і / usr / lib не доведеться враховувати ніяких каталогів, то ld.so.conf можна взагалі опустити).

У деяких дистрибутивах команда ldconfig виконується при кожному запуску комп'ютера, щоб гарантувати максимально оновлене стан файлу кеша. Її завжди потрібно виконувати в тих випадках, коли ви вручну встановлюєте нову бібліотеку, інакше система «не побачить» бібліотек. Якщо бібліотеки знаходяться в новому каталозі, потрібно відповідним чином доповнити файл / etc / ld.so.conf. При установці пакетів з бібліотеками ці завдання зазвичай виконує менеджер пакетів.

32- і 64-бітові бібліотеки

Більшість поширених дистрибутивів в даний час існують в як мінімум двох варіантах збірки: для 32-бітових процесорів, сумісних з Intel / AMD, і для 64-бітових процесорів, сумісних з Intel / AMD. Зрозуміло, для 32-бітових процесорів передбачені тільки 32-бітові бібліотеки. Однак, як не шкода, того ж не можна сказати про 64-бітних дистрибутивах: були і залишаються програми, що не компілюються для 64-бітових систем. Найбільш відома програма такого роду - Acrobat Reader компанії Adobe.

Для виконання 32-бітних програм в 64-бітних дистрибутивах вам будуть потрібні 32-бітові бібліотеки. Щоб можна було уникнути конфліктів, бібліотеки встановлюються в різні каталоги. Серед професіоналів в Linux цей метод називається мультіархітектура, або бі-архітектура, так як паралельно підтримується кілька (або дві) архітектури процесорів. У більшості дистрибутивів зустрічаються каталоги / lib32 або / ІЬ64, що дозволяють не змішувати бібліотеки з різною розрядністю. Така подвійність, зрозуміло, пов'язана з певними недоліками: при установці численних бібліотек в двох примірниках витрачається більше дискового простору, крім того, при цьому ускладнюється технічна підтримка.

попереднє зв'язування

При запуску програми, яка звертається до динамічних бібліотек, потрібно встановити з'єднання між програмою і бібліотеками. Цей процес називається зв'язуванням. При роботі зі складними програмами на зв'язування витрачається чимало часу.

Надалі кожна підготовлена ​​таким чином програма буде звертатися до своїх бібліотекам набагато швидше, а значить, і швидше запускатися. Таке прискорення особливо помітно в OpenOffice або в програмах KDE, на запуск яких тепер потрібно наполовину менше часу, ніж раніше. У будь-якому випадку дані попереднього зв'язування необхідно оновлювати при кожному оновленні бібліотеки.

Попереднє зв'язування має ще один недолік - ця операція змінює виконувані файли всіх програм і бібліотек. Крім того, ви вже не зможете контролювати цілісність таких файлів (тобто не зможете переконатися, що після установки файли залишилися колишніми). Коли завгодно можна скасувати будь-які зміни, внесені в ході попереднього зв'язування, за допомогою команди prelink -ua.

Debian, Ubuntu. Щоб користуватися попередніми зв'язуванням, необхідно встановити пакет prelink і задати в файлі / etc / default / prelink настройку PRELINKING = yes. Попереднє зв'язування буде щодня виконуватися як одним із завдань Cron.

Red Hat, Fedora. Функція попереднього зв'язування встановлена ​​за замовчуванням. Дані регулярно оновлюються (завдання Cron /etc/cron.daily/prelink, конфігураційний файл / etc / sysconfig / prelink).

SUSE. Для того щоб використовувати попереднє зв'язування, необхідно встановити пакет prelink і вказати в файлі / etc / sys-config / prelink настройку PRELINKING = yes. Потім prelink буде виконуватися модулем YaST після установки будь-якої нової програми або бібліотеки (сценарій /sbin/conf.d/SuSEconfig. Prelink).
Читайте також:
Як самостійно компілювати програми

Послуги з розробки сайтів на MODX

MODX є програмним забезпеченням, яке ми використовуємо, щоб розвивати всі наші веб-сайти.

MODX дозволить Вам мати повний контроль над вмістом, використовуваним на вашому сайті, ви можете додавати, видаляти, змінювати і редагувати будь-який контент, який побажаєте, можете повністю управляти своїм сайтом.

Професійна розробка сайтів на MODX, доробка та підтримка сайтів. створення і доопрацювання інтернет-магазинів на MODX.

Схожі статті