Проблема с компиляцией Ada (Ищете adbs, которых у меня нет?) - PullRequest
2 голосов
/ 03 мая 2011

Я пытаюсь скомпилировать библиотеку третьей части в мое существующее приложение, используя 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 \

Почему ему нужны фактические файлы тела? Разве спецификации + .a файл не достаточно? Как я могу обойти это?

Ответы [ 3 ]

6 голосов
/ 04 мая 2011

Спецификаций и архивной библиотеки недостаточно. Вам необходимо указать расположение файлов .ali. Также попробуйте использовать флаги -aI и -aL вместо -I.

3 голосов
/ 04 мая 2011

Необходимо указать:

-largs switches: переключатели компоновщика, где switches - список допустимых переключателей для gnatlink.

-Ldir: Добавить каталог dir в список каталогов, в которых компоновщик будет искать библиотеки.

Например,

-largs -L/lib/Linux/ndds.4.5d/lib/GNATgcc/static/debug -lnddsadad

Добавление:Вы также можете посмотреть на

-Adir: эквивалент -aLdir -aIdir.

2 голосов
/ 05 мая 2011

Вы можете создать файл проекта 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.

...