链接器错误:未定义对 _fbss 的引用

问题描述 投票:0回答:1

我成功地从这个this

构建了pulp-riscv-gnu-工具链

但是当我尝试使用构建的编译器编译简单的源代码时, 发生错误。

我的命令是

riscv32-unknown-elf-g++ -o hello hello.cpp

错误消息是

/home/jskim/test_toolchains_lib/gcc/riscv32-unknown-elf/7.1.1/../../../../riscv32-unknown-elf/bin/ld : cannot open linker script file riscv.ld : No such file or directory

所以我尝试使用这个命令

riscv32-unknown-elf-g++ -o main main.cpp -T /home/jskim/test_toolchains/riscv32-unknown-elf-ld/lib/ldscripts/elf32lriscv.x

但是发生了以下错误:

/home/jskim/test_toolchains/lib/gcc/riscv32-unknown-elf/7.1.1/../../../../riscv32-unknown-elf/lib/crt0.o: In function '.L0': (.text+0x10):undefined reference to '_fbss' collect2: error: ld returned 1 exit status

我正在使用 CentOS 7.6,我尝试使用 gcc 4.8.5 和 7.3.1 构建这个pulp-gcc,但两者都显示了相同的错误。请帮助我。

linux gcc linker-scripts
1个回答
1
投票

我就是这样解决问题的。

其实这就是解决方案。enter image description here

我不准确,但我认为问题在于名称不匹配。 crt0,它似乎是启动 riscv 处理器的助手,有这一行

la a0 _fbss
,如果 _fbss 替换为 _edata,基本上链接器可以识别这一行。所以我编辑位于
pulp-riscv-gnu-toolchain/riscv-newlib/libgloss/riscv/
的程序集文件并重建 gnu 工具链。并使用 -T 选项执行编译器,如
riscv32-unknown-elf-g++ -o main main.cpp -T /home/jskim/test_toolchains/riscv32-unknown-elf-ld/lib/ldscripts/elf32lriscv.x

这是我认为最简单的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.