Junior
Hansı növ kitabxanaları bilirsiniz və onların fərqləri nədir?
sobes.tech Süni İntellekt
AI-dan cavab
Kitabxana növləri:
- Statik kitabxanalar (.a Linux-də, .lib Windows-də): Kitabxananın kodu birbaşa tətbiqin icra faylına yığılır. Tətbiq ölçüsü böyüyür, amma işləmə zamanı sistemdə kitabxananın mövcudluğuna bağlı deyil. Statik kitabxanadan istifadə edən hər bir tətbiqin öz kod nüsxəsi var.
- Dinamik (paylaşılan) kitabxanalar (.so Linux-də, .dll Windows-də): Kitabxananın kodu işləmə zamanı tətbiqin yaddaşına yüklənir. Bu, tətbiqin icra faylının ölçüsünü azaldır. Bir neçə tətbiq eyni kitabxananın nüsxəsini istifadə edə bilər, bu da yaddaşdan qənaət edir. Doğru işləməsi üçün, dinamik kitabxana sistemdə mövcud olmalıdır.
Əsas fərqlər:
| Xüsusiyyət | Statik kitabxana | Dinamik kitabxana |
|---|---|---|
| Tətbiqin ölçüsü | Daha böyük (kod daxil edilir) | Daha kiçik (kod işləmə zamanı yüklənir) |
| Asılılıq | Yox (kod icra faylında) | Mövcuddur (kitabxana sistemdə olmalıdır) |
| Yaddaş istifadəsi | Hər tətbiqin öz kod nüsxəsi var | Bir neçə tətbiq eyni nüsxəni istifadə edə bilər |
| Kodun yenilənməsi | Yenidən tərtib tələb edir | Kitabxana ayrıca yenilənə bilər |
Statik kitabxananın istifadəsinə nümunə (şərti):
// main.cpp
#include "static_library.h" // Statik kitabxananın başlıq faylı
int main() {
// Statik kitabxanadan funksiyanı çağır
static_function();
return 0;
}
Dinamik kitabxananın istifadəsinə nümunə (şərti):
// main.cpp
#include <dlfcn.h> // Dinamik kitabxanaları yükləmək üçün funksiyalar
int main() {
// Dinamik kitabxananı yüklə
void* handle = dlopen("dynamic_library.so", RTLD_LAZY);
if (!handle) {
// Xəta ilə işləmə
}
// Kitabxanadan funksiyanın ünvanını al
void (*dynamic_function)(void) = (void (*)(void))dlsym(handle, "dynamic_function");
if (!dynamic_function) {
// Xəta ilə işləmə
}
// Funksiyanı çağır
dynamic_function();
// Kitabxananı bağla
dlclose(handle);
return 0;
}