提问人:temp1445 提问时间:11/7/2022 更新时间:11/7/2022 访问量:108
C 对微控制器进行编程时具有未定义引用的标准 lib 函数
C Standard lib functions having undefined reference when programming microcontroller
问:
我正在尝试为 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 函数,让程序像这里一样工作,还是有任何其他方法。此外,从 makefile 中删除该选项将导致一些错误。
我正在使用 gcc 9.4.1。和 riscv-gnu-toolchain-rv32i。任何意见将不胜感激。
答:
0赞
Peter Irich
11/7/2022
#1
我怎么记得 newlib 是程序编译微控制器所必需的, 因为标准函数是从中调用的,但我不知道从哪里来 newlib 可以下载。
评论
0赞
temp1445
11/7/2022
谢谢,你能解释更多吗?这对我来说有点难以理解
评论
-nostdlib
表示没有标准库。例如,您期望的定义从何而来?fopen