Statik va dinamik kutubxonalar o'rtasidagi farqlar qanday?

"C kutubxonasi" bu nomlangan funktsiyalar to'plami / guruhidir, masalan free (), malloc () yoki printf (). Boshqa dasturlar foydalanish uchun mo'ljallangan.

Ushbu funktsiyalar yoki o'zgaruvchilar tegishli fayllar deb nomlangan tegishli guruhlarga bo'linadi. Va "kutubxona" bu sarlavha fayllari to'plamidir.

Nega kutubxonalardan foydalanish kerak?

Kutubxonalar va sarlavhalar fayllari kirishni osonlashtirish uchun qilingan. Buni tushunish uchun bir misol keltiraylik.

Qattiq diskda biz ko'plab papkalarni yaratamiz. Bitta turdagi ma'lumotni bitta papkada saqlaymiz. Har bir papkada bir xil turdagi ma'lumotlar mavjud. Agar biz barcha turdagi ma'lumotlarni faqat bitta papkada saqlasak, ularga kirish qiyin bo'ladi. Shunday qilib, kirishni osonlashtirish uchun biz tegishli ma'lumotlarni bitta papkaga guruhlaymiz.

Xuddi shu - sarlavha fayllari siyosati. Tegishli barcha o'zgaruvchilar va funktsiyalar xuddi shu papkada joylashgan ma'lumotlar turi singari guruhlangan. Va bu sarlavha fayllari birgalikda kutubxonaga joylashtirilgan.

Vazifalar turlari

Vazifalar turlari

Biror narsa funktsiyani tasnifini ko'rib chiqishdan oldin; Vazifalarni ikki toifaga bo'lish mumkin

  • Kutubxona vazifalari yoki standart funktsiyalar.
  • Foydalanuvchi tomonidan belgilangan funktsiya.
Kutubxona funktsiyalari kompilyatorda oldindan belgilangan vazifadir va ularning ba'zi misollari printf () va scanf () dir. C dasturlashda foydalanuvchi tegishli kutubxona funktsiyasidan foydalanish uchun dasturning boshiga sarlavha fayllarini joylashtiradi. Umuman olganda, kutubxona funktsiyalarining barcha shunga o'xshash turlari bitta sarlavha fayliga ko'ra guruhlangan, masalan, kutubxona funktsiyalari pow (), sin () va hokazolar faqat math.h sarlavha faylida aniqlangan matematik operatsiyalarni bajarish uchun ishlatiladi. Foydalanuvchi tomonidan belgilangan funktsiya foydalanuvchi tomonidan dasturni yozish paytida yoziladi. Barcha kutubxona va foydalanuvchi tomonidan belgilangan funktsiyalar main () funktsiyasidan chaqirilishi mumkin.

Manba: https://electricalworkbook.com/c-functions/

Ular qanday ishlaydi?

Kutubxona funktsiyalari bu C funktsiyalari bo'lib, ular boshqa ob'ektlar bilan birgalikda tuziladi va ta'minlanadi, ular birgalikda guruhlangan va kutubxona deb nomlangan umumiy joyga joylashtirilgan.

Cdagi har bir kutubxona funktsiyasi muayyan operatsiyani bajaradi. Ushbu kutubxona funktsiyalaridan ushbu natijalarni olish uchun o'z kodini yozish o'rniga oldindan ishlab chiqarilgan natijalarni olish uchun foydalanishimiz mumkin.

Statik va dinamik kutubxonalar o'rtasidagi farqlar qanday?

Kutubxonalar ikki ta'mga ega: statik va dinamik.

Dynamic Library (Kutubxonalar) kutubxonadan kodni nusxalashni talab qilmaydi, bu faqat kutubxonaning nomini ikkilik faylga qo'shish orqali amalga oshiriladi. Haqiqiy bog'lanish dastur ishga tushirilganda, ikkilik fayl ham, kutubxona ham xotirada bo'lganda sodir bo'ladi. Dynamic kutubxonalariga misollar (ish vaqtida bog'langan kutubxonalar) Linuxda .so va Windows-da .dll.

Dinamikdan farqli o'laroq, Statik kutubxonalar kutubxonadan maqsadli ikkilikka ob'ekt fayl kodini o'z ichiga oladi. Natijada diskdagi kattaroq hajm va ishga tushirish vaqtining sekinlashishi kuzatiladi. Kutubxonaning kodi to'g'ridan-to'g'ri bog'langan maqsadli ikkilikga qo'shilganligi sababli, kutubxonadagi biron-bir kodni yangilash uchun, bog'langan maqsad ham qayta tiklanishi kerakligini anglatadi.

Ularni qanday yaratish kerak?

- Statik kutubxonani yarating:

1- Asosiy funktsiyasi bo'lgan C faylini yarating:

/ * fayl nomi: drayver.c * /
# "lib_mylib.h" qo'shing
void main ()
{
qiziqarli ();
}

2- Drayv dasturini tuzish:

gcc -c drayveri.c -o haydovchi.o

3. Tuzilgan haydovchi dasturini statik kutubxona bilan bog'lang. E'tibor bering -L. statik kutubxona joriy papkada ekanligini aytish uchun ishlatiladi (-L va -l variantlari haqida batafsilroq ma'lumot olish uchun buni ko'ring):

gcc -o drayveri.o -L. -l_milib

4. Drayver dasturini ishga tushiring:

. / haydovchi
statik kutubxonadan chaqirilgan fun ()

Bu hammasi.

-Dinamik kutubxona yarating.

Ikki bosqichli jarayonda.

  1. Ob'ekt kodini yarating
  2. Kutubxona yarating

e'tiroz bildirish uchun bizning barcha dastlabki kodlarimizni kompilyatsiya qilishga imkon beradi.

gcc -Wall -fPIC -c * .c

"-fPIC" deb nomlangan ushbu parametr nimani anglatishini ko'rib chiqaylik:

-fPIC
Agar maqsad mashinasi qo'llab-quvvatlansa, dinamik ulanish uchun mos bo'lgan va global ofset jadvalining har qanday cheklovidan qochgan holda holatdan mustaqil kodni chiqaring. Ushbu parametr AArch64, m68k, PowerPC va SPARC-larda farq qiladi.
Pozitsiyadan mustaqil kod maxsus qo'llab-quvvatlashni talab qiladi va shuning uchun faqat ma'lum mashinalarda ishlaydi.
Ushbu bayroq o'rnatilganida __pic__ va __PIC__ so'llari 2 ga belgilangan.

Manba: https://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#Code-Gen-Options

Boshqacha qilib aytganda, yaratilgan mashina kodi ishlash uchun ma'lum bir manzilda joylashganligiga bog'liq emas.

Endi biz ushbu ob'ekt faylini umumiy kutubxonaga aylantirishimiz kerak.

gcc -shared -o libexample.so * .o

Bu erda barcha ob'ektlarni olish va kutubxonaga kiritish kerak.

U erda siz birgalikda yoki dinamik kutubxonangizni .soz faylini ulashingiz mumkin.

Ulardan qanday foydalanish kerak?

Birinchidan, sizda kod bajarilishi kerak bo'lgan ba'zi zarur funktsiyani topsangiz, kodning birinchi qismida sizga qo'ng'iroq qilish kerak bo'ladi.

# o'z ichiga oladi <" src="https://imgstore.nyc3.cdn.digitaloceanspaces.com/mort-sure/1571932317181.gif" />

Shunday qilib, siz kodlash uchun qo'ng'iroq qilmoqchi bo'lgan yoki ishlatmoqchi bo'lgan barcha kutubxonalarning sarlavha fayllarini qo'shish uchun #include dasturidan foydalanishingiz kerak.

Shundan so'ng, kodni tuzayotganda, u chaqirilishi kerak bo'lgan vazifani aniq qaerda ekanligini bilib oladi.

Ularning har birining afzalliklari va kamchiliklari qanday?

Statik kutubxona uchun:

1. Statik kutubxonalarda, hamma narsa sizning ilovangizga biriktirilganidan so'ng, mijoz o'z tizimida kerakli kutubxonani (va versiyani) olishidan qo'rqmaysiz.

2. Hozirgi vaqtda statik kutubxonalarning afzalliklaridan biri "tezlik" dir. Statik kutubxonalarda simvolik dinamik so'rovlar bo'lmaydi. Ko'pgina ishlab chiqarish tarmoq dasturlari bugungi kunda ham statik kutubxonalardan foydalanadi.

3. Statik kutubxonalarning bitta kamchiligi shundaki, statik kutubxonalardagi har qanday o'zgarish uchun siz har safar asosiy dasturni qayta to'ldirishingiz kerak.

Dinamik kutubxona uchun:

  1. Dinamik ulanishdan foydalanib, dasturlar hajmini kamaytirishingiz mumkin. Birgalikda ishlatiladigan kutubxonalar g'oyasi odatdagi odatiy ishlarning faqat bitta nusxasi bo'lishi va ushbu umumiy nusxani noyob umumiy kutubxona segmentida saqlashdir. Ushbu odatiy tartiblar bajariladigan dasturlarning hajmini sezilarli darajada kamaytiradi va shu bilan diskdagi bo'sh joyni tejaydi.
  2. Umumiy vaqt kutubxona kodi allaqachon xotirada bo'lganligi sababli yuk vaqtini qisqartirish mumkin.
  3. Kamchiliklari: Dinamik ravishda bog'langan dasturlar mos kutubxonaga bog'liq. Agar kutubxona o'zgartirilgan bo'lsa (masalan, yangi kompilyator versiyasi kutubxonani o'zgartirishi mumkin), kutubxonaning yangi versiyasiga mos kelishi uchun ilovalarni qayta ishlash kerak bo'lishi mumkin. Agar kutubxona tizimdan olib tashlansa, undan foydalanadigan dasturlar ishlamaydi.