Как исключить из GPRbuild некоторые функции?

У меня есть исполняемый файл в Ada, скомпилированный с помощью gprbuild. Исполняемый файл использует некоторую простую функцию (например, sin e cos). Этот исполняемый файл работает в приложении, привязанном к POS (операционной системе разделов), разработанной с помощью vxwork. После перекомпиляции всего процесса появляется множество ошибок объявления нескольких функций между POS_API.o и исполняемым файлом ada (hello.o). Эти функции (sin, cos,...) находятся в одной библиотеке. К сожалению, самое простое решение для разыменования всей этой функции в POS не разрешено (связано с дизайном). Любые предложения о том, как скомпилировать или продолжить? Есть ли возможность скомпилировать без конкретной библиотеки или какой-либо функции, чтобы избежать ошибки множественных ссылок?

Есть ли документация VxWorks о том, как решить ту же проблему с C? Я очень удивлен, обнаружив исполняемый в файле .o, но я давно не пользовался VxWorks (5.4) и тогда такого быть не могло. Возможно, вам нужно собрать библиотеку из исходного кода Ады, а не из исполняемого файла.

Simon Wright 19.02.2019 21:39

@SimonWright Когда я использовал версии VxWorks 5.1.1, 5.4 и 5.5, был способ загрузить .o в память и вызвать пользовательские функции C прямо из командной строки. Я не знаю, было ли это артефактом пользовательской сборки ОС (нам пришлось изменить код C только для того, чтобы добавить жесткий диск в нашу систему... так что это возможно) или что-то еще.

Jere 20.02.2019 04:53

Вы следите за этот ответ? (на что вы, кстати, не ответили: толку было?) Если да, то посмотрю еще

Simon Wright 20.02.2019 12:46

Я точно выполнил этот предыдущий шаг. Проблема заключается в том, как изменить исполняемый файл, чтобы избежать множественных ссылок. Есть ли какой-либо атрибут, который можно использовать в компоновщике пакетов для отключения двойной ссылки? Мне удалось добавить POS_api.o в компоновщик (среда GPS) и получить ту же ошибку.

Giovanni 20.02.2019 14:39
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
104
1

Ответы 1

Боюсь, это не совсем ответ: в основном потому, что прошло более десяти лет с тех пор, как я работал с VxWorks и Ada, и все стало немного туманно. Кроме того, это немного долго для комментария к вашему вопросу

Как я его использовал, VxWorks поставляется с целым набором программного обеспечения, которое вы настраиваете для хранения только тех компонентов, которые вам нужны в вашем ядре: в этом случае это, предположительно, будет включать математический пакет, такие функции, как sin(), а также функции ОС, такие как taskSpawn().

Процесс сборки Ada/VxWorks, который мы использовали, создает частично связанный объектный файл со ссылками на sin(), taskSpawn() неразрешенными (я не могу вспомнить, как это достигается; если используется GNU ld, может быть, переключатель -r или --relocatable?). Когда VxWorks загружает этот объектный файл поверх сконфигурированного ядра, неразрешенные ссылки разрешаются, и все готово.

Теперь я не знаю, что делает ваш POS_API. Это скин поверх настроенного ядра VxWorks? Загружает ли он саму вашу программу на Аде? Если это сама программа VxWorks, почему она экспортирует sin()?

Я подозреваю, что проблема связана с тем, как вы связали свой исполняемый файл. Может быть, вы могли бы показать нам свой файл GPR? Иначе я просто свистну в темноте.

Другие вопросы по теме