我正在尝试为一个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。任何意见将不胜感激。
1条答案
按热度按时间8i9zcol21#
我记得newlib是微控制器编译程序所需要的,因为标准函数是从它调用的,但我不知道newlib可以从哪里下载。