Junior
Кадом намуд китобхонаҳоро мешиносед ва фарқиятҳои онҳо чӣҳоянд?
sobes.tech AI
Ҷавоб аз AI
Види бібліотек:
- Статичні бібліотеки (.a у Linux, .lib у Windows): Код бібліотеки безпосередньо вбудовується у виконуваний файл програми під час компіляції. Програма стає більшою, але не залежить від наявності самої бібліотеки в системі під час виконання. Кожна програма, яка використовує статичну бібліотеку, має свою власну копію коду.
- Динамічні (спільні) бібліотеки (.so у Linux, .dll у Windows): Код бібліотеки завантажується в пам’ять програми під час виконання. Це зменшує розмір виконуваного файлу програми. Кілька програм можуть використовувати одну й ту ж копію бібліотеки, що економить пам’ять. Для коректної роботи програми динамічна бібліотека повинна бути присутня в системі.
Основні відмінності:
| Ознака | Статична бібліотека | Динамічна бібліотека |
|---|---|---|
| Розмір програми | Більший (код вбудовується) | Менший (код завантажується під час виконання) |
| Залежність | Відсутня (код всередині виконуваного файлу) | Присутня (бібліотека має бути в системі) |
| Використання пам’яті | Кожна програма має свою копію коду | Кілька програм можуть використовувати одну копію |
| Оновлення коду | Вимагає перекомпіляції програми | Можна оновити бібліотеку окремо |
Приклад використання статичної бібліотеки у C++ (умовний):
// main.cpp
#include "static_library.h" // Заголовочний файл статичної бібліотеки
int main() {
// Виклик функції з статичної бібліотеки
static_function();
return 0;
}
Приклад використання динамічної бібліотеки у C++ (умовний):
// main.cpp
#include <dlfcn.h> // Для функцій завантаження динамічних бібліотек
int main() {
// Завантаження динамічної бібліотеки
void* handle = dlopen("dynamic_library.so", RTLD_LAZY);
if (!handle) {
// Обробка помилки
}
// Отримання адреси функції з бібліотеки
void (*dynamic_function)(void) = (void (*)(void))dlsym(handle, "dynamic_function");
if (!dynamic_function) {
// Обробка помилки
}
// Виклик функції
dynamic_function();
// Закриття бібліотеки
dlclose(handle);
return 0;
}