Что делает аргумент -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.specs
file, в этом случае трудно сказать, как и почему он решил вашу проблему с компоновщиком. Альтернативным решением, конечно же, было бы применить любые переключатели, которые есть в файле спецификаций, напрямую.