Домашняя страница библиотеки_c AVR

Синтаксис языка C

Библиотека языка C GNU glibc

 Страницы развития библиотеки_с AVR

Главная страница

Инструкция пользователя

Содержание библиотеки_c

Часто задаваемые вопросы

Содержание по алфавиту

Демонстрационные проекты


Как построена библиотека

Введение

Вы продолжаете многократно использовать одни и те же функции, которые создавали много раз? Утомились "вырезать и вставлять" из одного проекта в следующий? Хотели бы Вы уменьшать ваше мучение? Тогда Вы созрели для создания вашей собственной библиотеки! Многократное использование кода - очень похвальная вещь. С некоторыми афронт инвестициями, Вы можете экономить время и энергию в будущих проектах при наличии готовых к использованию библиотек. Эта глава описывает некоторую основную информацию, рассмотрение дизайна, и практическое знание, с которым Вы сможете создавать и использовать ваши собственные библиотеки.

Как работает линкер

Компилятор компилирует единственный файл языка высокого уровня (например, язык C) в единственный файл объектного модуля. Компоновщик (ld) может работать только с объектными модулями, чтобы связать их вместе. Объектный модуль - наименьший модуль, с которым работает компоновщик.

Как правило, в командной строке компоновщика определяется набор объектных модулей (который был предварительно откомпилирован) и затем список библиотек, включая Стандартную библиотеку C. Компоновщик берет набор объектных модулей, которые Вы определяете в командной строке, и связывает их вместе. Впоследствии вероятно будет набор "неопределенных ссылок". Ссылка - по существу функциональный запрос. Неопределенная ссылка - функциональный запрос, без определенной функции для соответствия запросу.

Компоновщик тогда пройдет библиотеки, чтобы соответствовать неопределенным ссылкам с функциональными определениями, которые найдены в библиотеках. Если это находит функцию, которая соответствует запросу, тогда компоновщик свяжется в объектном модуле, в котором функция расположена. Эта часть важна: компоновщик связывается в ПОЛНОМ ОБЪЕКТНОМ МОДУЛЕ, в котором функция расположена. Помните, компоновщик не знает ничто о функциях, внутренних к объектному модулю, отличному от имен символа (типа имен функции). Наименьший модуль работы компоновщика с - объектные модули.

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

Как проектировать библиотеку

Как компоновщик ведет себя, очень важно при проектировании библиотеки. Идеально, Вы хотите проектировать библиотеку, где только функции, которые вызывают - единственные функции, которые будут связаны в конечное приложение. Это помогает сводить размер кода к минимуму. Чтобы сделать это, путем работы с компоновщиком, должен записать только одну функцию в модуль кода. Это компилирует к одной функции в объектный модуль. Обычно это очень отличный способ сделать вещи чем запись приложения!

Есть всегда исключения из правила. Вообще есть два случая, в которых Вы хотели бы иметь больше чем одну функцию в объектном модуле.

1. Когда Вы имеете очень дополнительные функции, что это не делает много смысла разбить их. Например, malloc() и free(). Если кто - то собирается использовать malloc (), он вероятно будет использовать free() (или по крайней мере должен использовать free()). В этом случае, это делает больше смысла объединить эти две функции в том же самом объектном модуле.

2. Когда Вы хотите иметь программу обработки прерывания (хранение и поиск информации) в вашей библиотеке, в которой Вы хотите связаться. В этом случае проблема состоит в том, что компоновщик ищет нерешенные ссылки и пробует решать их с кодом в библиотеках. Ссылка та же самая как функциональный запрос. Но с хранениями и поисками информации, нет никакого функционального запроса инициализировать хранение и поиск информации. Хранение и поиск информации помещено в таблицу векторов прерывания (IVT), следовательно никакой запрос, никакая ссылка, и никакое соединение в хранения и поиска информации. Чтобы сделать это, Вы должны обманывать в соответствии с компоновщиком в пути. Объедините хранение и поиск информации, с другой функцией в том же самом объектном модуле, но имейте другую функцию быть кое-чем, что требуется для пользователя звонить, чтобы использовать хранение и поиск информации, подобно возможно функции инициализации для подсистемы, или возможно функция, которая допускает хранению и поиску информации во-первых.

Создание библиотеки

Библиотечную программу называют ar (для "архиватора") и найден в GNU Binutils проектом. Эта программа будет сформирована для AVR адресата и будет поэтому называться avr-ar.

Задание библиотечной программы просто: объедините список объектных модулей в единственную библиотеку (архив) и создайте индекс для компоновщика, чтобы использовать. Название, которое Вы создаете для библиотечного имени файла, должно следовать за определенным образцом: lib<name>.a. Часть <name> является уникальной частью имени файла, которое Вы создаете. Это облегчает, касается ли <название> частью того, чем библиотека является. Это <название> часть должна быть предустановлена "lib", и это должно иметь расширение файла .a, для "архива". Смысл для специальной формы имени файла - для того, как библиотека привыкает toolchain, поскольку мы будем видеть позже.

Примечание:

Имя файла с учетом регистра. Используйте префикс "lib" нижнего регистра, и нижний регистр ".a" как расширение файла.

Командная строка довольно проста:

avr-as rcs <library name> <list of object modules>

Команда r выключатель говорит программе вставлять объектные модули в архив с заменой.  переключатель c командной строки говорит программе создавать архив. И команда s выключатель строки говорит программе записывать индекс файла, содержащего объектный модуль в архив, или модифицировать существующий. Этот последний выключатель очень важен, поскольку это помогает компоновщику находить то, что это должно сделать его задание.

Примечание:

Переключатели командной строки чувствительны к регистру! Есть выключатели верхнего регистра, которые имеют совершенно иные действия.

MFile и WinAVR распределение содержат Шаблон Формирования файла, который включает необходимые командные строки, чтобы формировать библиотеку. Вы должны будете вручную изменить шаблон, чтобы переключить это, чтобы формировать библиотеку вместо приложения.

См. ГНУ Binutils руководство для подробной информации относительно ar программа.

Использование библиотеки

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

-lm

это расширится до библиотечного имени файла:

libm.a

который, случается, математическая библиотека, включенная в avr-libc.

Если Вы используете это на вашей командной строке компоновщика:

-lprintf_flt

тогда компоновщик будет искать названную библиотеку:

libprintf_flt.a

Это - то, почему обозначение вашей библиотеки настолько важно, когда Вы создаете её!

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

Есть также переключатели командной строки, которые говорят GCC который каталог заглянуть (-L) для библиотек, которые определены, чтобы быть linke в с -l.

См. GNU Binutils руководство для подробной информации относительно компоновщика GNU (ld) программа.

 

Hosted by uCoz