Этот пост призван помочь новичкам в использовании статических библиотек. Библиотеки — это файлы, содержащие внутри себя объектные файлы.

-(Если вы еще не разбираетесь в объектных файлах, вы можете обратиться к этому сообщению, где я объясняю процесс компиляции одного файла.)

Библиотеки — это набор подпрограмм, которые будут использоваться программой, и они полезны, когда вам приходится часто использовать определенные подпрограммы.

В большинстве случаев библиотека представляет собой код, созданный другими разработчиками и доступный для использования вами, поэтому вам не нужно «изобретать велосипед», но вы также можете создать свою собственную библиотеку. Процесс довольно прост.

Зачем мы используем библиотеки?

В общем, библиотеки позволяют разработчикам создавать программы гораздо более эффективным способом, поскольку они менее подвержены ошибкам, если создаются и поддерживаются сообществом.

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

Предположим, у вас есть файл 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 предоставит информацию о символах, используемых объектными файлами в библиотеке, т. е. виртуальный адрес символа, имя символа и т. д.

Как использовать только что созданную библиотеку

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

Следуя примеру, который мы предложили в разделе Как работает библиотека, обратите внимание, что во втором примере мы вызывали библиотеку только для того, чтобы наш процесс компиляции работал.

В этой статье рассматриваются только статические библиотеки. Динамические библиотеки могут быть рассмотрены в следующей статье. до тех пор я надеюсь, что эта статья окажется полезной, чтобы познакомить вас с использованием библиотек.