Для начала давайте определим, что же такое, черт возьми, благословенные и замечательные библиотеки. Вы можете сказать, что это проекты с определенными функциями или методами, в которых вы можете присоединяться к другим проектам и дополнять их, используя свои конкретные методы для конкретного решения. т.е. фрагменты кода сделаны третьими лицами. Это заставляет нас много программировать, и наша программа облегчает ее выполнение, а затем и понимание.
Зачем вообще использовать библиотеки
Для тех, кто не держит четкую концепцию, перечитайте или лучше; посмотрите на некоторые преимущества, изложенные ниже, и сделайте собственные выводы:
- Библиотеку гораздо проще реализовать в нашем проекте (он только берет ссылку на нее и использует ее), потому что все делается (делайте с ней что хотите), очень редко бывает неполная библиотека (вообще глупо).
- Обычно библиотека оптимизирована для более быстрой работы, это связано с тем, что отладка отключена, а иногда и функции трассировки, что увеличивает отладку и обеспечивает лучшие результаты для конечного пользователя. Кроме того, внешний программист может использовать оптимизаторы кода. Все это возможно, если программист, создавший библиотеку, сделал домашнее задание (и умеет хорошо программировать).
- Это намного упорядоченнее, чем одно приложение; т.е. «каждый книжный магазин сам за себя». без лишней ерунды они конкретные.
Вернемся к делу, и после великолепного объяснения мы можем сказать:
- Динамические библиотеки — это файлы .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
Создать динамическую библиотеку
- Введите следующую команду:
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!
. Теперь, когда вы знаете, как создавать и использовать динамические библиотеки, отправляйтесь покорять мир!
Ну, ребята, спасибо за чтение и чао