неправильное количество аргументов, заданных для атрибута ‘__deprecated__’

Вопрос или проблема

Я пытаюсь скомпилировать newlib 3.0.0 для цели m68k-aout. У меня уже есть готовые binutils и gcc для этой цели, я собираю его с помощью gcc-13.3.0, но получаю эти две ошибки.

newlib-3.0.0/newlib/libc/include/stdlib.h:130: ошибка: указано неверное количество аргументов для атрибута '__deprecated__'
newlib-3.0.0/newlib/libc/include/stdlib.h:138: ошибка: указано неверное количество аргументов для атрибута '__deprecated__'

Есть ли какие-нибудь обходные пути или исправления, которые я мог бы попробовать?

Ответ или решение

Ошибка, с которой вы столкнулись при компиляции newlib 3.0.0 для цели m68k-aout, связана с неправильным количеством аргументов, переданных атрибуту __deprecated__. Данная проблема возникает в файле stdlib.h, а именно на строках 130 и 138. Это может быть следствием того, что разные версии компиляторов имеют различия в реализации атрибутов и их аргументов.

Причины проблемы

Атрибут __deprecated__ используется для указания на устаревшие функции. В отличие от более ранних версий GCC, где атрибут __deprecated__ не требовал аргументов, современные версии (начиная с 4.6.0) требуют, чтобы этот атрибут имел хотя бы один аргумент в виде строки, объясняющей причину устаревания функции. Если этого аргумента не указать, компилятор выдает ошибку, подобную той, с которой вы столкнулись.

Возможные решения

  1. Изменение кода newlib:
    Вам необходимо открыть файл stdlib.h и убедиться, что атрибут __deprecated__ правильно используется. Пример правильного использования:

    __attribute__((__deprecated__("Используйте новую функцию вместо этой")))
    void устаревшая_функция();

    Если в ваших строках 130 и 138 нет аргументов, добавьте строковый аргумент, чтобы указать причину устаревания.

  2. Обновление newlib:
    Возможно, что в более поздних версиях newlib эта проблема уже исправлена. Рассмотрите возможность обновления до более свежей версии, если это совместимо с вашими потребностями.

  3. Использование старой версии компилятора:
    Если обновление newlib невозможно по каким-либо причинам, вы можете попробовать скомпилировать ваш проект с помощью более ранней версии GCC (например, версии 4.x.x), которая не требует аргументов для атрибута __deprecated__.

  4. Изменение макросов:
    Иногда в коде используются макросы для упрощения декларирования функций с атрибутом __deprecated__. Проверьте наличие таких макросов в других заголовочных файлах или в вашем проекте, и при необходимости измените их, добавив требуемые аргументы.

Заключение

Ошибка, с которой вы столкнулись, указывает на то, что между версиями компилятора и библиотек возникает несовместимость. Использование описанных выше решений должно помочь вам справиться с проблемой и успешно скомпилировать newlib для вашего целевого устройства. Если указанные рекомендации не приведут к успешному результату, пожалуйста, обратитесь к документации как GCC, так и newlib, а также к сообществам разработчиков для получения дополнительной поддержки.

Оцените материал
Добавить комментарий

Капча загружается...