Отправляет email-рассылки с помощью сервиса Sendsay

Программирование и др.

  Все выпуски  

Программирование в Linux с нуля - Выпуск 7


Информационный Канал Subscribe.Ru

Рассылка проекта Lindevel.Ru

Программирование в Linux с нуля. Выпуск 7.

1. Предисловие

Здравствуйте, уважаемые подписчики. В этом выпуске мы познакомимся со статическими библиотеками. Сайт проекта (http://lindevel.ru) сменил содержание и оформление. Вся информация появится там примерно через неделю, когда все будет отлажено. Буду рад выслушать ваши предложения и претензии в форуме Lindevel.Ru.

2. Программа

2.1. Описание

Чтобы не изобретать велосипедов, воспользуемся программой из прошлого выпуска. Однако чтобы создать статическую библиотеку (вместо динамической), придется изменить Makefile. Только сначала дайте команду make clean.

2.2. Файлы

Makefile
main: main.o hello
        gcc -o main main.o -L. -lhello

main.o: main.c
        gcc -c main.c

hello1.o: hello1.c
        gcc -c hello1.c -o hello1.o

hello2.o: hello2.c
        gcc -c hello2.c -o hello2.o

hello: hello1.o hello2.o
        ar cr libhello.a hello1.o hello2.o

clean:
        rm -f *.o libhello.a main


2.3. Компиляция и запуск

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

3. Теория

3.1. Статические библиотеки

Статическая библиотека - это просто архив, в котором упакованы объектные файлы. При сборке программы, эти файлы включаются в исполняемый модуль так же, как если бы они включались по-отдельности. По многим причинам статические библиотеки используются в Linux крайне редко, однако мы не можем их игнорировать, поскольку в некоторых случаях они оказываются очень полезными.

Статическая библиотека подключается к исполняемому модулю не во время запуска, а во время сборки, поэтому объектные файлы в такой библиотеке не содержат позиционно-независимый код, и статическая сборка производится без параметра -Wl,-rpath.

3.2. Разбор полетов

Для создания статической библиотеки используется команда ar, создающая архив. Аргумент cr позволяет создать архив (с) и поместить в него файлы (r). Как видно из примера, статические библиотеки носят суффикс .a (archive).

Статическая сборка производится аналогично динамической: в качестве аргумента опции -l указывается имя библиотеки без префикса lib и суффикса .a. Возникает вопрос: что будет, если в системе находятся одновременно и статическая и динамическая версии одной библиотеки (например, libqt.so и libqt.a)? При отбрасывании префикса и суффикса получается одно и то же: libqt. В таком случае линковщик отдает предпочтение динамической библиотеке. Чтобы изменить приоритет статической библиотеки используют опцию линковщика -static.

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

Этот выпуск завершает изучение основ программирования в Linux. Теперь следует переходить или к изучению секретов прикладного программирования (automake, GUI, curses и т. д.) или к изучению ядра Linux. Ядро изучать намного интереснее, но и сложнее. Чтобы практически использовать такие навыки, потребуется частая перекомпиляция и права доступа root. Хотелось бы услышать ваши предложения в форуме на Lindevel.Ru.


Всегда ваш, Николай.
mailto: nnivanov@mail.ru
Рассылки Subscribe.Ru
*nix project - новости из мира unix-систем! (ежедневная)

http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.linuxp
Отписаться

В избранное