【发布时间】:2021-09-13 09:35:52
【问题描述】:
我正在开发 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>
但我仍然遇到同样的错误。
我不明白要选择哪些选项来链接正确的库
【问题讨论】:
-
您没有使用 libc,您使用的是 sqrt,并且您没有提供自己的 sqrt。你不能同时拥有这三个。
-
sqrt 是由 libm.a 实现的不是吗?
-
libm.a: (also tried without -Wl)将链接移到对象之后。gcc <options> <list of .o> -lm -
抱歉没有仔细阅读问题。 libm.a 是 glibc 的一部分,但您可以(有时)单独使用它。