Рубрики

Статические и Динамические Библиотеки | Комплект 1

Когда программа на C компилируется, компилятор генерирует объектный код. После генерации объектного кода компилятор также вызывает компоновщик. Одна из основных задач компоновщика — сделать код библиотечных функций (например, printf (), scanf (), sqrt (), ..etc) доступным для вашей программы. Компоновщик может выполнить эту задачу двумя способами, скопировав код библиотечной функции в объектный код или сделав некоторые меры, чтобы полный код библиотечных функций не копировался, а был доступен во время выполнения.

Статическое связывание и статические библиотеки являются результатом того, что компоновщик копирует все используемые библиотечные функции в исполняемый файл. Статическое связывание создает большие двоичные файлы и требует больше места на диске и в основной памяти. Примерами статических библиотек (статически связанных библиотек) являются файлы .a в Linux и файлы .lib в Windows.

Шаги по созданию статической библиотеки Давайте создадим и используем статическую библиотеку в UNIX или UNIX-подобных ОС.
1. Создайте файл C, который содержит функции в вашей библиотеке.

/ * Имя файла: lib_mylib.c * /
#include <stdio.h>

void fun(void)

{

  printf("fun() called from a static library");

}

Мы создали только один файл для простоты. Мы также можем создать несколько файлов в библиотеке.

2. Создайте заголовочный файл для библиотеки

/ * Имя файла: lib_mylib.h * /

void fun(void);

3. Скомпилируйте библиотечные файлы.

 gcc -c lib_mylib.c -o lib_mylib.o 

4. Создайте статическую библиотеку. Этот шаг заключается в объединении нескольких объектных файлов в одну статическую библиотеку (подробнее см. Ar ). Результатом этого шага является статическая библиотека.

 ar rcs lib_mylib.a lib_mylib.o 

5. Теперь наша статическая библиотека готова к использованию. На данный момент мы можем просто скопировать lib_mylib.a куда-нибудь еще, чтобы использовать его. Для демонстрации давайте сохраним библиотеку в текущем каталоге.

Давайте создадим программу-драйвер, которая использует созданную выше статическую библиотеку .
1. Создайте файл C с основной функцией

/ * имя файла: driver.c * /
#include "lib_mylib.h"

void main() 

{

  fun();

}

2. Скомпилируйте программу драйвера.

gcc -c driver.c -o driver.o

3. Свяжите скомпилированную программу драйвера со статической библиотекой. Обратите внимание, что -L . используется для указания того, что статическая библиотека находится в текущей папке (подробности об опциях -L и -l см. в этом разделе).

gcc -o driver driver.o -L. -l_mylib

4. Запустите программу драйвера

./driver 
fun() called from a static library

Ниже приведены некоторые важные моменты о статических библиотеках.
1. Для статической библиотеки реальный код извлекается из библиотеки компоновщиком и используется для создания окончательного исполняемого файла в момент компиляции / сборки приложения.

Рекомендуемые посты:

Статические и Динамические Библиотеки | Комплект 1

0.00 (0%) 0 votes