Вопрос или проблема
Я пытаюсь скомпилировать 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) требуют, чтобы этот атрибут имел хотя бы один аргумент в виде строки, объясняющей причину устаревания функции. Если этого аргумента не указать, компилятор выдает ошибку, подобную той, с которой вы столкнулись.
Возможные решения
-
Изменение кода newlib:
Вам необходимо открыть файлstdlib.h
и убедиться, что атрибут__deprecated__
правильно используется. Пример правильного использования:__attribute__((__deprecated__("Используйте новую функцию вместо этой"))) void устаревшая_функция();
Если в ваших строках 130 и 138 нет аргументов, добавьте строковый аргумент, чтобы указать причину устаревания.
-
Обновление newlib:
Возможно, что в более поздних версиях newlib эта проблема уже исправлена. Рассмотрите возможность обновления до более свежей версии, если это совместимо с вашими потребностями. -
Использование старой версии компилятора:
Если обновление newlib невозможно по каким-либо причинам, вы можете попробовать скомпилировать ваш проект с помощью более ранней версии GCC (например, версии 4.x.x), которая не требует аргументов для атрибута__deprecated__
. -
Изменение макросов:
Иногда в коде используются макросы для упрощения декларирования функций с атрибутом__deprecated__
. Проверьте наличие таких макросов в других заголовочных файлах или в вашем проекте, и при необходимости измените их, добавив требуемые аргументы.
Заключение
Ошибка, с которой вы столкнулись, указывает на то, что между версиями компилятора и библиотек возникает несовместимость. Использование описанных выше решений должно помочь вам справиться с проблемой и успешно скомпилировать newlib для вашего целевого устройства. Если указанные рекомендации не приведут к успешному результату, пожалуйста, обратитесь к документации как GCC, так и newlib, а также к сообществам разработчиков для получения дополнительной поддержки.