gcc 编程微控制器时,C标准库函数具有未定义的引用

xpcnnkqh  于 2022-11-24  发布在  其他
关注(0)|答案(1)|浏览(142)

我正在尝试为一个RISCV处理器编写一个固件,它应该向数字电路提供一些数据。我想从一个文件中获取数据,而不是在c固件中生成数据。但是当我尝试启动模拟时,所有的stdlib函数,如fopen()、fgets()、fclose()和memcpy()都将有未定义的引用。我检查了makefile,我看到了以下内容:

%.elf: %.c $(LINKER_SCRIPT) $(SOURCE_FILES)
    ${GCC_PATH}/${GCC_PREFIX}-gcc -g \
    -I$(FIRMWARE_PATH) \
    -I$(VERILOG_PATH)/dv/generated \
    -I$(VERILOG_PATH)/dv/ \
    -I$(VERILOG_PATH)/common \
      $(CPUFLAGS) \
    -Wl,-Bstatic,-T,$(LINKER_SCRIPT),--strip-debug \
    -ffreestanding -nostdlib -o $@ $(SOURCE_FILES) $<

所以添加了-nostdlib选项。我的问题是我应该定义所有的std函数来让程序像here一样工作吗?还是有其他的方法?从makefile中删除这个选项也会导致一些错误。
我正在使用gcc 9.4.1.和riscv-gnu-toolchain-rv 32 i。任何意见将不胜感激。

8i9zcol2

8i9zcol21#

我记得newlib是微控制器编译程序所需要的,因为标准函数是从它调用的,但我不知道newlib可以从哪里下载。

相关问题