当我构建休闲区时,我在Eclipse Oxygen上得到了这些消息。文件已编译,但无法链接。nostdlibs是链接器通用的未标记的其他库。当我不使用stranded函数时,链接器错误不会出现。
#include <stdio.h>
int main(int argc, char *argv[]) {
printf("!RISC-V World!\n\r");
return 0;
}错误:
make all
Building file: ../src/Test_1.c
Invoking: RISC-V GCC/Newlib C Compiler
riscv64-unknown-elf-gcc -mabi=ilp32 -g3 -gdwarf-2 -march=rv32i -O0 -Wall -c -MMD -MP -MF"src/Test_1.d" -MT"src/Test_1.o" -o "src/Test_1.o" "../src/Test_1.c"
Finished building: ../src/Test_1.c
Building target: Test_1.elf
Invoking: RISC-V GCC/Newlib C Linker
riscv64-unknown-elf-gcc -mabi=ilp32 -g3 -gdwarf-2 -march=rv32i -L"C:\Program Files\GNU MCU Eclipse\RISC-V Embedded GCC\7.1.1-2-20170912-2255\riscv64-unknown-elf\lib\rv32i\ilp32" -Wl,-Map,Test_1.map -o "Test_1.elf" ./src/Test_1.o -lc
C:\Program Files\GNU MCU Eclipse\RISC-V Embedded GCC\7.1.1-2-20170912-2255\riscv64-unknown-elf\lib\rv32i\ilp32\libc.a(lib_a-exit.o): In function `.L0 ':
exit.c:(.text.exit+0x34): undefined reference to `_exit'
C:\Program Files\GNU MCU Eclipse\RISC-V Embedded GCC\7.1.1-2-20170912-2255\riscv64-unknown-elf\lib\rv32i\ilp32\libc.a(lib_a-sbrkr.o): In function `.L0 ':
sbrkr.c:(.text._sbrk_r+0x1c): undefined reference to `_sbrk'
C:\Program Files\GNU MCU Eclipse\RISC-V Embedded GCC\7.1.1-2-20170912-2255\riscv64-unknown-elf\lib\rv32i\ilp32\libc.a(lib_a-writer.o): In function `.L0 ':
writer.c:(.text._write_r+0x28): undefined reference to `_write'
C:\Program Files\GNU MCU Eclipse\RISC-V Embedded GCC\7.1.1-2-20170912-2255\riscv64-unknown-elf\lib\rv32i\ilp32\libc.a(lib_a-closer.o): In function `.L0 ':
closer.c:(.text._close_r+0x1c): undefined reference to `_close'
C:\Program Files\GNU MCU Eclipse\RISC-V Embedded GCC\7.1.1-2-20170912-2255\riscv64-unknown-elf\lib\rv32i\ilp32\libc.a(lib_a-fstatr.o): In function `.L0 ':
fstatr.c:(.text._fstat_r+0x24): undefined reference to `_fstat'
C:\Program Files\GNU MCU Eclipse\RISC-V Embedded GCC\7.1.1-2-20170912-2255\riscv64-unknown-elf\lib\rv32i\ilp32\libc.a(lib_a-isattyr.o): In function `.L0 ':
isattyr.c:(.text._isatty_r+0x1c): undefined reference to `_isatty'
C:\Program Files\GNU MCU Eclipse\RISC-V Embedded GCC\7.1.1-2-20170912-2255\riscv64-unknown-elf\lib\rv32i\ilp32\libc.a(lib_a-lseekr.o): In function `.L0 ':
lseekr.c:(.text._lseek_r+0x28): undefined reference to `_lseek'
C:\Program Files\GNU MCU Eclipse\RISC-V Embedded GCC\7.1.1-2-20170912-2255\riscv64-unknown-elf\lib\rv32i\ilp32\libc.a(lib_a-readr.o): In function `.L0 ':
readr.c:(.text._read_r+0x28): undefined reference to `_read'
collect2.exe: error: ld returned 1 exit status
make: *** [Test_1.elf] Error 1
makefile:42: recipe for target 'Test_1.elf' failed发布于 2020-09-15 19:48:57
缺少的函数来自libgloss.a。该问题表明链接器无法链接到libgloss.a,因此请检查您的系统中是否存在rv32i/ilp32的libgloss.a。
添加-lgloss可能会解决这个问题,但通常-lc和-lgloss已经存在于链接器规范中。
此外,由于libc存在于riscv64-unknown-elf\lib\rv32i\ilp32中。我假设您的编译器是使用--enable-multilib构建的,所以您不需要将路径添加到libc。
要确保您的编译器是使用--enable-multilib构建的,您可以添加-v选项并查看Configured行。
https://stackoverflow.com/questions/46661932
复制相似问题