У меня есть исполняемый файл в Ada, скомпилированный с помощью gprbuild. Исполняемый файл использует некоторую простую функцию (например, sin e cos). Этот исполняемый файл работает в приложении, привязанном к POS (операционной системе разделов), разработанной с помощью vxwork. После перекомпиляции всего процесса появляется множество ошибок объявления нескольких функций между POS_API.o и исполняемым файлом ada (hello.o). Эти функции (sin, cos,...) находятся в одной библиотеке. К сожалению, самое простое решение для разыменования всей этой функции в POS не разрешено (связано с дизайном). Любые предложения о том, как скомпилировать или продолжить? Есть ли возможность скомпилировать без конкретной библиотеки или какой-либо функции, чтобы избежать ошибки множественных ссылок?
Как исключить из GPRbuild некоторые функции?
Ответы (1)
Боюсь, это не совсем ответ: в основном потому, что прошло более десяти лет с тех пор, как я работал с VxWorks и Ada, и все стало немного туманно. Кроме того, это немного долго для комментария к вашему вопросу
Как я его использовал, VxWorks поставляется с целым набором программного обеспечения, которое вы настраиваете для хранения только тех компонентов, которые вам нужны в вашем ядре: в этом случае это, предположительно, будет включать пакет maths, такие функции, как sin()
, а также функции ОС, такие как taskSpawn()
.
Процесс сборки Ada/VxWorks, который мы использовали, создает частично связанный объектный файл со ссылками на sin()
, taskSpawn()
неразрешенными (я не могу вспомнить, как это достигается; если используется GNU ld
, возможно, переключатель -r
или --relocatable
?). Когда VxWorks загружает этот объектный файл поверх сконфигурированного ядра, неразрешенные ссылки разрешаются, и все готово.
Теперь я не знаю, что делает ваш POS_API. Это скин поверх настроенного ядра VxWorks? Загружает ли он саму вашу программу на Аде? Если это сама программа VxWorks, почему она экспортирует sin()
?
Я подозреваю, что проблема связана с тем, как вы связали свой исполняемый файл. Может быть, вы могли бы показать нам свой файл GPR? Иначе я просто свистну в темноте.
.o
файле, но я давно не пользовался VxWorks (5.4) и тогда такое было невозможно. Возможно, вам нужно собрать библиотеку из исходного кода Ады, а не из исполняемого файла. - person Simon Wright   schedule 19.02.2019