Тази публикация има за цел да помогне на начинаещите C да използват статични библиотеки. Библиотеките са файлове, които съдържат обектни файлове в себе си.

(Ако тепърва ще разбирате обектните файлове, можете да се обърнете към тази публикация, където обяснявам процеса на компилиране на един файл.)

Библиотеките са колекция от рутинни процедури, които трябва да се използват от програма и са полезни, когато трябва често да използвате определени рутинни процедури.

През повечето време библиотеката е код, който е създаден от други разработчици и е достъпен за използване, така че не е нужно да „преоткривате колелото“, но можете също да създадете своя собствена библиотека. Процесът е доста прост.

Защо използваме библиотеки?

Като цяло библиотеките позволяват на разработчиците да създават програми по много по-ефективен начин, тъй като са по-малко склонни да имат грешки, ако са създадени и поддържани от общност.

И как работи една библиотека

Да предположим, че имате файл main.c, който извиква вътре в него функция myFunction(). В момента на компилиране с командата gcc най-вероятно ще получите съобщение за недефинирана препратка към 'myFunction()', ако не други файлове са посочени.

Може да кажете, Ами… ох, винаги трябва да препращате към своя функционален файл заедно с основния си файл в момента на компилиране,Но какво се случва, когато вашите програми нараснат до точката, в която трябва да управлявате много процедури и вие main.c извиквате няколко от тях? ще посочите ли всяка отделна функция във вашата команда gcc?

Библиотеката ще ви позволи да компилирате програма, без да се налага изрично да свързвате вашите подпрограми. Връщайки се към процеса на компилиране, линкерът автоматично ще търси във вашата библиотека функциите, които не се намират другаде. Така основният файл може да бъде компилиран.

И така, как да създам своя собствена библиотека?

Вашата библиотека, която ще бъде създадена, трябва да съдържа всички изходни файлове с функциите, които трябва да използвате, за да компилирате основната програма в текущата ви директория. Командата ar е вградена функция в Linux, която ще ви позволи да създадете библиотека. но преди това ще трябва да използвате командата GCC в Linux, за да конвертирате вашите .c файлове в обектни файлове с помощта на флага -c. Можете да изберете дали да включите или не флаговете -Wall, -Wextra, -Werror и -pedantic, за да добавите допълнителен слой на внимателност, за да сте сигурни, че вашият код няма грешки.

gcc -Wall -pedantic -Werror -Wextra -c *.c

След като приключите, можете да проверите дали имате всички обектни файлове, от които се нуждаете, като напишете

ls *.o

Като направите това, трябва да можете да видите всичките си обектни файлове, които да бъдат включени в библиотеката...

След като имате вашите обектни файлове, използвайте следната команда, за да създадете вашата библиотека

ar -rc libeverything.a *.o 

Командата ar създава библиотека, наречена „libeverything.a“. По конвенция всички статични библиотеки в c трябва да започват с префикса lib и да завършват с разширението .a

Последващите флагове -r и -c съответно казват на ar да замени по-старите файлове в библиотеката с новите файлове; и да създадете библиотеката, ако тя все още не съществува.

Веднъж създадена, командата ranlib ще създаде или актуализира индекса на вашата библиотека. Това ще помогне на компилатора да ускори процеса на търсене на символи в библиотеката. използвайте ranlib както следва.

ranlib libeverything.a

Командата nm libeverything.aще предостави информация за символите, използвани от обектните файлове в библиотеката, т.е. виртуален адрес на символа, име на символа и т.н.

Как да използвате вашата новосъздадена библиотека

Проверете следното изображение:

Продължавайки примера, който предложихме в раздела Как работи библиотека, забележете как във втория пример направихме извикване само на библиотека, за да накараме нашия процес на компилиране да работи.

Тази статия обхващаше само статични библиотеки, динамичните библиотеки може да бъдат разгледани в бъдеща статия. дотогава се надявам тази статия да се окаже полезна, за да ви запознае с използването на библиотеки.