Что делает аргумент -specs в arm-none-eabi-gcc?

У меня возникли проблемы с компоновщиком для встроенного компилятора arm gcc, и я нашел где-то в Интернете учебник, в котором говорится, что я могу исправить ошибки компоновщика в arm-none-eabi-gcc включив аргумент -specs=nosys.specs, который у меня сработал, и он смог скомпилировать мой код.

Мой чип - микроконтроллер ATSAM7SE256, который, насколько я понимаю, является arm7tdmi процессор, использующий armv4t а также thumb наборы инструкций, и я компилировал свой код, используя:

      arm-none-eabi-gcc -march=armv4t -mtune=arm7tdmi -specs=nosys.specs -o <exe_name>.elf <input_files>

И код компилируется без проблем, но я понятия не имею, делает ли он то, что я думаю.

Какое значение имеет файл спецификации? Какие еще значения вы можете установить с помощью -specs=, а в каких ситуациях вы бы хотели? Является nosys.specs какое значение я хочу для полностью встроенного микроконтроллера руки?

1 ответ

Это задокументировано по адресу: https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/O Total-Options.html#O Total-Options.

Это файл, содержащий переключатели для переопределения стандартных значений по умолчанию для различных компонентов сборки, таких как компилятор, ассемблер и компоновщик. Например, его можно использовать для замены библиотеки C.

Я никогда не видел, чтобы его использовали; как правило, в сборках встроенных систем с нуля явно указывается --nostdlibзатем явно свяжите требуемую библиотеку. Его можно использовать для среды сборки, специфичной для конкретной среды, для связывания другого кода по умолчанию, такого как RTOS, я думаю. Лично я бы предпочел сделать все это явным в командной строке, которая скрывает это где-то в файле.

По сути, он применяет параметры, указанные в файле, как если бы они были значениями по умолчанию, поэтому их можно использовать для определения значений по умолчанию для определенных сред сборки и выполнения.

Формат файла спецификаций задокументирован по адресу https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Spec-Files.html#Spec-Files.

Не видя ни ошибок компоновщика, ни содержимого nosys.specsfile, в этом случае трудно сказать, как и почему он решил вашу проблему с компоновщиком. Альтернативным решением, конечно же, было бы применить любые переключатели, которые есть в файле спецификаций, напрямую.

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