0

我正在开发 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> 但我仍然得到同样的错误。

我不明白选择哪些选项来链接正确的库

4

1 回答 1

0

很抱歉这个自我回答,但我想我已经找到了解决方案。

  • 我的第一个错误是库必须放在命令行的末尾。论点的顺序确实很重要。
  • 然后 gcc 安装中有很多版本,libm.a所以我必须选择正确的

以下行正在工作:

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__errnoimpure_data

于 2021-09-13T12:14:42.750 回答