Ада-95. Компилятор GNAT
66ac8edd

Проекты библиотек


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

Для создания проекта библиотеки, в файле проекта необходимо описать двухуровневые атрибуты: Library_Name и Library_Dir.

Дополнительно, можно описать атрибуты, которые относятся к библиотекам: Library_Kind, Library_Version и Library_Elaboration.

Атрибут Library_Name имеет строчное значение, которое должно начинаться с буквы и должно включать в себе только буквы и цифры.

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

В случае, когда оба атрибута, Library_Name и Library_Dir, указаны и являются допустимыми, предполагается, что файл проекта описывает проект библиотеки. Только для таких файлов проектов будут осуществляться проверка дополнительных, необязательных атрибутов, которые относятся к библиотекам.

Атрибут Library_Kind является строкой, которая должна иметь одно из следующих значений (указанные значения не зависят от регистра символов): "static", "dynamic" или "relocatable".

При отсутствии описания этого атрибута, предполагается, что библиотека является статической (то есть, значение по умолчанию - "static").

В противном случае, библиотека может быть динамической ("dynamic") или перемещаемой ("relocatable").

Следует заметить, что в зависимости от используемой операционной системы, различие между динамической и перемещаемой библиотекой может отсутствовать. Например, в UNIX такое различие отсутствует.

Атрибут Library_Version является строкой, интерпретация смысла которой зависит от платформы.

В UNIX, это значение используется только для динамических/перемещаемых библиотек, как внутреннее имя библиотеки (известное как "soname").






Если имя файла библиотеки (построенное из Library_Name) отличается от Library_Version, то файл библиотеки будет символической ссылкой на фактический файл библиотеки, именем которого будет Library_Version.

Пример файла проекта библиотеки (для UNIX):

project Plib is

Version := "1";

for Library_Dir use "lib_dir"; for Library_Name use "dummy"; for Library_Kind use "relocatable"; for Library_Version use "libdummy.so." & Version;

end Plib;

Каталог "lib_dir" будет содержать внутренний файл библиотеки именем которого будет "libdummy.so.1", а "libdummy.so" будет символической ссылкой на "libdummy.so.1".

Когда утилита gnatmake обнаруживает, что файл проекта (не главный файл проекта) является файлом проекта библиотеки, она проверяет все непосредственные исходные файлы проекта и осуществляет пересборку библиотеки если любой из исходных файлов был перекомпилирован.

Кроме того, все файлы "ALI" будут скопированы из каталога объектных файлов в каталог библиотеки.

При этом, для сборки исполняемых файлов утилита gnatmake

будет использовать библиотеку, а не индивидуальные объектные файлы.


Содержание раздела