
Когда мы пишем программу, мы полагаемся на множество пользовательских функций, мы также можем повторно использовать их в других программах.
Чтобы эти функции были доступны нескольким программам, мы полагаемся на динамическую библиотеку.
Так что же такое динамическая библиотека?
Динамическая библиотека — это файл, содержащий несколько объектных кодов. Это были файлы C, содержащие тело нескольких функций, прежде чем они были преобразованы в объектные файлы. Объектные файлы содержат объектный код, который представляет собой машинный код, выводимый ассемблером.
Когда программа компилируется, функция, определенная в динамической библиотеке, заменяется адресом. Когда программа выполняется, библиотека загружается, и каждый вызов функции будет указывать на соответствующий раздел кода в библиотеке.
Динамическая библиотека против статической библиотеки
Динамическая библиотека создается отдельно от исполняемого файла программы и загружается во время выполнения. тогда как статическая библиотека компилируется с остальной частью файла программы, чтобы получить окончательный исполняемый файл.
Преимущества динамической библиотеки
Использование динамической библиотеки делает размер исполняемой программы относительно меньше, чем если бы исполняемый файл содержал код статической библиотеки. Таким образом, это более эффективно памяти. Кроме того, всякий раз, когда происходит обновление динамической библиотеки, мы можем просто изменить файл этой последней без перекомпиляции программы, чтобы получить новый исполняемый файл.
Недостатки динамической библиотеки
Программа не является автономной. если динамическая библиотека не существует во время загрузки, ваша программа завершится ошибкой.
Преимущества статической библиотеки
Он компилируется с остальной частью программы, чтобы получить один исполняемый файл. Такой подход позволяет программе загружаться быстрее, чем программа, использующая динамическую библиотеку во время выполнения.
Недостатки статической библиотеки
Исполняемый файл, основанный на статической библиотеке, относительно больше, чем тот, который основан на динамической библиотеке.
Когда мы хотим обновить библиотеку, мы должны снова перекомпилировать всю программу, это может занять много времени и неудобно для пользователей, чтобы снова загрузить программу.
Как создать динамическую библиотеку (Linux)
Сначала вам нужно преобразовать файлы c в объектные файлы. Просто введите следующую команду: gcc *.c -c -fPIC
Флаг -fPIC гарантирует, что код не зависит от позиции. Это означает, что не имеет значения, где компьютер загружает код в память.
-c предназначен для преобразования файлов «.c» в объектные файлы «.o».
Чтобы создать библиотеку, введите gcc *.o -shared -o liball.so (замените желаемое имя библиотеки на al)
вам нужно будет экспортировать путь для библиотек, чтобы программы знали, где их искать, выполнив следующую команду:
export LD_LIBRARY_PATH=$PWD:$LD_LIBRARY_PATH
Использование динамических библиотек (Linux)
gcc -L test_code.c -lholberton -o test_code
-lв сочетании с holberton указывает компилятору искать динамическую библиотеку с именем libholberton.so.