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

Зачем вообще использовать библиотеки

Для тех, кто не держит четкую концепцию, перечитайте или лучше; посмотрите на некоторые преимущества, изложенные ниже, и сделайте собственные выводы:

  • Библиотеку гораздо проще реализовать в нашем проекте (он только берет ссылку на нее и использует ее), потому что все делается (делайте с ней что хотите), очень редко бывает неполная библиотека (вообще глупо).
  • Обычно библиотека оптимизирована для более быстрой работы, это связано с тем, что отладка отключена, а иногда и функции трассировки, что увеличивает отладку и обеспечивает лучшие результаты для конечного пользователя. Кроме того, внешний программист может использовать оптимизаторы кода. Все это возможно, если программист, создавший библиотеку, сделал домашнее задание (и умеет хорошо программировать).
  • Это намного упорядоченнее, чем одно приложение; т.е. «каждый книжный магазин сам за себя». без лишней ерунды они конкретные.

Вернемся к делу, и после великолепного объяснения мы можем сказать:

  • Динамические библиотеки — это файлы .so (.dll или Windows или OS X .dylib). Все, что связано с кодом библиотеки, находится в этом файле, и используйте программы, которые упоминают его во время выполнения. Программа, использующая общую библиотеку, ссылается только на код, используемый в общей библиотеке.
  • Статические библиотеки представляют собой (или Windows .lib) файлы. Все, что связано с кодом библиотеки, находится в этом файле и напрямую связано с программой в момент компиляции. Программа, которая использует статическую библиотеку, копирует код с помощью статической библиотеки и делает его частью программы.

Есть преимущества и недостатки каждого метода?

Есть преимущества и недостатки каждого метода? . Так что да, все зависит от проекта, который вам достался в судьбе, используйте метод удобства.

  • Динамические библиотеки уменьшают объем кода, который дублируется в каждой программе, использующей библиотеку, сохраняя небольшие двоичные файлы. Это также позволяет вам заменить тот, который используется функционально эквивалентным объектом, но может иметь дополнительные преимущества в производительности без перекомпиляции программы, которая его использует. Однако динамические библиотеки будут иметь небольшие дополнительные затраты на выполнение функций и нагрузку во время выполнения, поскольку все библиотечные символы должны быть связаны с вещами, которые они используют. Кроме того, общие библиотеки могут быть загружены в приложение во время выполнения, что является общим механизмом для реализации аксессуаров двоичных систем.
  • Статические библиотеки увеличивают общий размер двоичного файла, но это означает, что вам не нужно носить с собой копию используемой библиотеки. Поскольку код подключается во время компиляции, никаких дополнительных транспортных расходов во время выполнения. Код просто есть.

А теперь для тех, кто еще читает и не заскучал. Пример создания и использования библиотек выше:

Создание статической библиотеки Давайте создадим и будем использовать статическую библиотеку

1. Создайте файл C, содержащий функции из вашей библиотеки.

/* Имя файла: my_lib.c */
#include ‹stdio.h›
void pythoniscool(void)
{
printf(“pythoniscool() вызывается из статическая библиотека»);

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

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

/* Имя файла: my_lib.h */
void pythoniscool(void);

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

gcc -c my_lib.c -o my_lib.o

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

ar rcs my_lib.a my_lib.o

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

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

/* имя файла: python.c */
#include “my_lib.h”
void main()
{
pythoniscool();

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

gcc -c python.c -o python.o

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

gcc -o python python.o -L. -l_mylib

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

./python
pythoniscool() called from a static library

Создать динамическую библиотеку

  1. Введите следующую команду: gcc *.c -c -fPIC и нажмите клавишу возврата. По сути, эта команда создает один объектный файл .o для каждого исходного файла .c.

Флаг -fPIC гарантирует, что код не зависит от позиции. Это означает, что не имеет значения, где компьютер загружает код в память. Некоторым операционным системам и процессорам необходимо создавать библиотеки из позиционно-независимого кода, чтобы они могли решать во время выполнения, где они хотят загрузить его в память. Параметры -c просто гарантируют, что каждый файл .o еще не связан.

2. В следующей команде: gcc *.o -shared -o liball.so (замените желаемое имя библиотеки на all) и нажмите клавишу возврата. Подстановочный знак * указывает компилятору скомпилировать все файлы .o в динамическую библиотеку, указанную флагом -shared. Соглашение об именах для динамических библиотек таково, что имя каждой общей библиотеки должно начинаться с lib и заканчиваться на .so . Однако, кроме этого, дайте волю своему воображению при выборе имен для ваших динамических библиотек.

3. Наконец, нам нужно экспортировать пути для библиотек, чтобы программы знали, где их искать, выполнив следующую команду: export LD_LIBRARY_PATH=$PWD:$LD_LIBRARY_PATH

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

gcc -L test_code.c -lpython -o test_code

В приведенной выше команде стоит отметить, что исходный код, в данном случае test_code.c, должен быть указан перед флагом -l. Выражение -lв сочетании с python указывает компилятору искать динамическую библиотеку с именем libpython.so, а флаг -L указывает компилятору искать файл библиотеки в текущем каталоге. Вот почему важно использовать стандартный формат для именования, который я описал ранее. Например, если test_code.c было следующим:

#include "python.h"
int main(void)
{
      _puts("python is cool!");
      return (0);
}

Ввод и выполнение gcc -L test_code.c -lpython -o test_code приведет к созданию исполняемого файла с именем test_code. Для этого компилятор просматривает библиотеку, указанную с помощью флага -l, для кода объекта функции _puts. Выполнение test_code следующим образом: ./test_code даст нам следующий результат: python is cool!. Теперь, когда вы знаете, как создавать и использовать динамические библиотеки, отправляйтесь покорять мир!

Ну, ребята, спасибо за чтение и чао