Sobes.tech
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;
}