GCC: включить функцию math.h в программное обеспечение без операционной системы на ARM (arm-none-eabi-gcc)

Я работаю над автономным программным обеспечением на STM32H753. Я не использую ни libc, ни crt.

Вот командная строка ссылки:

arm-none-eabi-gcc -T"xxx.ld" -mfpu=fpv5-d16 -mfloat-abi=hard -mthumb -ffreestanding -nostdlib -nostartfiles --specs=nosys.specs -Wl,--start-group -lc -lm -Wl,--end-group -Wl,-Map=xxx.map -o xxx.elf <list of .o>

Теперь мне нужно включить математическую библиотеку, поскольку я использую sqrtфункция. Я думал, что командной строки ссылки будет достаточно, но я получаю ошибку «sqrt undefined».

Я пытался добавить путь к libm.a: (также пробовал без -Wl)

arm-none-eabi-gcc -T"xxx.ld" -Wl,-L/opt/gcc-arm-none-eabi-10-2020-q4-major/arm-none-eabi/lib/ -mfpu=fpv5-d16 -mfloat-abi=hard -mthumb -ffreestanding -nostdlib -nostartfiles --specs=nosys.specs -Wl,--start-group -lc -lm -Wl,--end-group -Wl,-Map=build_uP1/base_gen_uP1.map -o build_uP1/base_gen_uP1.elf <list of .o> Но я все равно получаю ту же ошибку.

Я не понимаю, какие варианты выбрать для связывания с правильной библиотекой

1 ответ

Извините за этот ответ, но я думаю, что нашел решение.

  • моя первая ошибка в том, что библиотеку нужно ставить в конец командной строки. порядок аргументов имеет значение.
  • то есть много версий libm.a в установке gcc, поэтому мне пришлось выбрать правильный

Следующая строка работает:

arm-none-eabi-gcc -T"xxx.ld" -L/opt/gcc-arm-none-eabi-10-2020-q4-major/arm-none-eabi/lib/thumb/v7+fp/hard/ -mfpu=fpv5-d16 -mfloat-abi=hard -mthumb -ffreestanding -nostdlib -nostartfiles --specs=nosys.specs -Wl,-Map=xxx.map -o xxx.elf <list of .o> -lm -lc

Я заметил, что один символ и некоторые данные из libc.a необходимы: __errno, а также impure_data

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