Проблема компиляции Ada (Ищете adbs, которых у меня нет?)
Я пытаюсь скомпилировать библиотеку третьей части в мое существующее приложение, используя gnatmake.. И я получаю эту ошибку:
gnatmake: "dds.adb" not found
gnatmake: "dds-domainparticipant.adb" not found
gnatmake: "dds-domainparticipantfactory.adb" not found
gnatmake: "dds-publisher.adb" not found
gnatmake: "dds-topic.adb" not found
gnatmake: "dds-publisher_impl.adb" not found
gnatmake: "dds-datawriter_impl.adb" not found
gnatmake: "dds-domainparticipant_impl.adb" not found
gnatmake: "dds-readcondition_impl.adb" not found
gnatmake: "dds-datareader_impl.adb" not found
gnatmake: "dds-subscriber.adb" not found
gnatmake: "dds-condition.adb" not found
gnatmake: "dds-datareader.adb" not found
gnatmake: "dds-statuscondition.adb" not found
Я добавил их в gnatmake, который создает ADP. -I содержит все спецификации (файлы.ads), а libnddsadad содержит все файлы o:
-I/lib/ndds.4.5d/include/ndds/dds_ada \
-I/lib/ndds.4.5d/include/ndds/dds_ada/support \
-I/lib/ndds.4.5d/include/ndds/dds_ada/support/low-level \
/lib/Linux/ndds.4.5d/lib/GNATgcc/static/debug/libnddsadad.a \
Любые идеи, почему он хочет фактические файлы тела? Разве не должно хватить файла specs + .a? Как я могу обойти это?
3 ответа
Спецификаций и архивной библиотеки недостаточно. Вам необходимо указать расположение файлов.ali. Также попробуйте использовать флаги -aI и -aL вместо -I.
Вам необходимо указать:
-largs switches
: Линкерные переключатели, где switches
список ключей, которые являются действительными для gnatlink
,
-Ldir
: Добавить каталог dir
в список каталогов, в которых компоновщик будет искать библиотеки.
Например,
-largs -L/lib/Linux/ndds.4.5d/lib/GNATgcc/static/debug -lnddsadad
Приложение: Вы также можете посмотреть на
-Adir
: Эквивалентно -aLdir -aIdir
,
Вы можете создать файл проекта GNAT для библиотеки, что-то вроде этого:
project DDS_Lib is
for Source_Dirs use ("/usr/include/dds_path");
for Library_Name use "nddsadad";
for Library_Dir use "/usr/lib/dds_path";
for Library_ALI_Dir use "/usr/lib/dds_ali_path";
for Externally_Built use "true";
end DDS_Lib;
а затем в файле проекта добавьте with "dds_lib.gpr";
в начале. Вам не нужно ничего добавлять к своим флагам компоновщика, чтобы связать эту библиотеку, так как это делается автоматически.
Хорошие библиотеки Ada уже предоставляют такой gpr-файл, который должен быть установлен по стандартному пути поиска (например, /usr/lib/gnat/). Если он установлен по нестандартному пути, вы можете добавить путь к ADA_PROJECT_PATH
переменная окружения.