linux - 链接器错误:未定义的 _fbss 引用
问题描述
我从这个成功地构建了pull-riscv-gnu-toolchain
但是当我尝试使用内置编译器编译我的简单源代码时,发生了错误。
我的命令是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 构建这个纸浆 gcc,但两者都显示相同的错误。请帮我。
解决方案
我以这种方式解决问题。
我不准确,但我认为问题在于名称不匹配。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
这是我认为最简单的解决方案。
推荐阅读
- python - 如何让python使用日期时间制作日历
- python - 如何在 Keras 中缓存层激活?
- javascript - 给定其他两个数组中的索引和值,如何生成一个新的 JavaScript 数组?
- android - 时间选择器 - 没有显示对话框
- c - 如何反转链表的顺序?
- electron - 将文件添加到打包的电子应用程序的正确方法是什么?
- ms-access - 访问查询正在询问计算字段的参数,我该如何停止呢?
- authentication - OAuth 客户端凭据流 - 将客户端详细信息作为声明调用
- python - Gensim LDA 多核 Python 脚本运行速度太慢
- node.js - 从包中导入子文件夹