【问题标题】:riscv-gcc Fails to build [GCC_NO_EXECUTABLES]riscv-gcc 无法构建 [GCC_NO_EXECUTABLES]
【发布时间】:2020-03-21 08:51:54
【问题描述】:

我想使用 riscv-gcc 在 Arty-A7 上实现 Ibex(RISCV 核心)示例,但我无法正确构建它。 在“制作”阶段之后它一直在失败。它似乎与 zlib 有关,但我不太确定,因为这是我第一次从源代码构建任何东西。我从https://github.com/riscv/riscv-gcc得到了源代码

我已将其配置为 make as

../riscv-gcc/configure --enable-multilib
make

然后退出并出现以下错误

checking whether the gcc  -m32 linker (ld -m elf_x86_64 -m elf_i386) supports shared libraries... yes
checking whether -lc should be explicitly linked in... no
checking dynamic linker characteristics... configure: error: Link tests are not allowed after GCC_NO_EXECUTABLES.
make[2]: *** [configure-stage1-zlib] Error 1
make[2]: Leaving directory `/home/alfred/Desktop/Work/riscv_gcc_install'
make[1]: *** [stage1-bubble] Error 2
make[1]: Leaving directory `/home/alfred/Desktop/Work/riscv_gcc_install'
make: *** [all] Error 2

我也尝试过使用

运行 make(相同的配置)
make all-gcc

但它会产生此错误

checking if gcc  -m32 supports -fno-rtti -fno-exceptions... no
checking for gcc  -m32 option to produce PIC... -fPIC -DPIC
checking if gcc  -m32 PIC flag -fPIC -DPIC works... yes
checking if gcc  -m32 static flag -static works... no
checking if gcc  -m32 supports -c -o file.o... yes
checking if gcc  -m32 supports -c -o file.o... (cached) yes
checking whether the gcc  -m32 linker (ld -m elf_x86_64 -m elf_i386) supports shared libraries... yes
checking whether -lc should be explicitly linked in... no
checking dynamic linker characteristics... configure: error: Link tests are not allowed after GCC_NO_EXECUTABLES.
make: *** [configure-zlib] Error 1

除了按照https://gcc.gnu.org/install/prerequisites.html 的建议检查必备库之外,我不确定目前该做什么。谁能帮帮我?

[27/11/19 更新]

我尝试从 https://github.com/riscv/riscv-gnu-toolchain> 安装完整的 riscv-gnu-toolchain 以避免丢失依赖项,但是我仍然遇到错误。我确实运行了建议的 apt-get 命令来安装先决条件。

我运行了建议以 riscv32 为目标的配置,并按如下方式进行了 make

./configure --prefix=/opt/riscv --with-arch=rv32gc --with-abi=ilp32d
make linux

然后我得到了这个错误

make[3]: Entering directory `/home/alfred/Desktop/Work/riscv-gnu-toolchain/build-binutils-linux/binutils'
/bin/bash /home/alfred/Desktop/Work/riscv-gnu-toolchain/riscv-binutils/binutils/../ylwrap /home/alfred/Desktop/Work/riscv-gnu-toolchain/riscv-binutils/binutils/arparse.y y.tab.c arparse.c y.tab.h `echo arparse.c | sed -e s/cc$/hh/ -e s/cpp$/hpp/ -e s/cxx$/hxx/ -e s/c++$/h++/ -e s/c$/h/` y.output arparse.output -- bison -y  -d
m4: unrecognized option '--gnu'
Try `m4 --help' for more information.
make[4]: Entering directory `/home/alfred/Desktop/Work/riscv-gnu-toolchain/build-binutils-linux/binutils'
/bin/bash /home/alfred/Desktop/Work/riscv-gnu-toolchain/riscv-binutils/binutils/../ylwrap /home/alfred/Desktop/Work/riscv-gnu-toolchain/riscv-binutils/binutils/arparse.y y.tab.c arparse.c y.tab.h `echo arparse.c | sed -e s/cc$/hh/ -e s/cpp$/hpp/ -e s/cxx$/hxx/ -e s/c++$/h++/ -e s/c$/h/` y.output arparse.output -- bison -y  -d
m4: unrecognized option '--gnu'
Try `m4 --help' for more information.
make[4]: Leaving directory `/home/alfred/Desktop/Work/riscv-gnu-toolchain/build-binutils-linux/binutils'
/bin/bash /home/alfred/Desktop/Work/riscv-gnu-toolchain/riscv-binutils/binutils/../ylwrap /home/alfred/Desktop/Work/riscv-gnu-toolchain/riscv-binutils/binutils/sysinfo.y y.tab.c sysinfo.c y.tab.h `echo sysinfo.c | sed -e s/cc$/hh/ -e s/cpp$/hpp/ -e s/cxx$/hxx/ -e s/c++$/h++/ -e s/c$/h/` y.output sysinfo.output -- bison -y  -d
/home/alfred/Desktop/Work/riscv-gnu-toolchain/riscv-binutils/binutils/sysinfo.y: warning: 1 shift/reduce conflict [-Wconflicts-sr]
m4: unrecognized option '--gnu'
Try `m4 --help' for more information.
if [ -r sysinfo.c ]; then \
      gcc -c -I. -W -Wall -Wstrict-prototypes -Wmissing-prototypes -Wshadow -I/home/alfred/Desktop/Work/riscv-gnu-toolchain/riscv-binutils/binutils/../zlib -g -O2  sysinfo.c ; \
    else \
      gcc -c -I. -W -Wall -Wstrict-prototypes -Wmissing-prototypes -Wshadow -I/home/alfred/Desktop/Work/riscv-gnu-toolchain/riscv-binutils/binutils/../zlib -g -O2  /home/alfred/Desktop/Work/riscv-gnu-toolchain/riscv-binutils/binutils/sysinfo.c ; \
    fi
gcc: error: /home/alfred/Desktop/Work/riscv-gnu-toolchain/riscv-binutils/binutils/sysinfo.c: No such file or directory
gcc: fatal error: no input files
compilation terminated.
make[3]: *** [sysinfo.o] Error 4
make[3]: Leaving directory `/home/alfred/Desktop/Work/riscv-gnu-toolchain/build-binutils-linux/binutils'
make[2]: *** [all-binutils] Error 2
make[2]: Leaving directory `/home/alfred/Desktop/Work/riscv-gnu-toolchain/build-binutils-linux'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/home/alfred/Desktop/Work/riscv-gnu-toolchain/build-binutils-linux'
make: *** [stamps/build-binutils-linux] Error 2

我注意到 m4 无法识别某个参数

--gnu

我应该关心这个吗?

[2019 年 16 月 12 日更新]

按照建议,我尝试在 Ubuntu 18.04.03 中构建工具链(最初我是在 14.04 上),它似乎已经很好地解决了这个问题!事实证明,当涉及到操作系统依赖项时,工具链确实是“脆弱的”。非常感谢您的帮助!

【问题讨论】:

  • 你好。您拥有哪个版本的 Arty A7 板 - -35T 或 -100T?您使用哪个指令来构建 gcc?我认为您不应该搜索仅 gcc 的变体,而应该搜索完整的工具链指令,例如 github.com/riscv/riscv-gnu-toolchain 或来自 Ibex 作者网站的内容(ibex-core.readthedocs.io/en/latest/… - GCC 设置)。错误“不允许链接测试”与不完整的工具链(ld、binutils、libc)有关,就像在gcc.gnu.org/ml/gcc-help/2012-07/msg00018.html 中一样。
  • 你好@osgx,我使用的是Arty-A7的--35T版本。我尝试构建 riscv-gnu-toolchain 而不仅仅是 riscv-gcc 但是我仍然遇到问题。我会更新帖子。

标签: gcc riscv riscv32


【解决方案1】:

错误“Link tests are not allowed”与不完整的工具链(如ld、binutils、libc)有关,类似于https://gcc.gnu.org/ml/gcc-help/2012-07/中的报告msg00018.html。

从您的问题中不清楚您使用哪条指令来构建 gcc。我认为你不应该只搜索 gcc 构建,而应该搜索完整的工具链指令,如 https://github.com/riscv/riscv-gnu-toolchain 或来自 Ibex 作者网站的东西。 https://ibex-core.readthedocs.io/en/latest/verification.html#getting-started 页中的 Ibex 文档有一些指向“GCC 设置”的链接,但它用于验证并且没有完整的说明。

在问题 https://github.com/riscv/riscv-gcc/issues/143 中有信息“没有 binutils 就无法构建 gcc。”和“没有 C 库就无法构建有用的 gcc。 em>”,所以尝试构建完整的工具链,而不仅仅是 gcc。

在 lowrisc 的早期项目中,有构建工具链的指令(组合 gcc + binutils + newlib):https://www.lowrisc.org/blog/2017/09/building-upstream-risc-v-gccbinutilsnewlib-the-quick-and-dirty-way/ - 你可能想用另一个 git (riscv-gcc) 修改指令。或者试试https://github.com/riscv/riscv-gnu-toolchain

【讨论】:

  • 您好!再次感谢您的回复,我刚刚尝试安装 riscv-gnu-toolchain 我将更新帖子。这次它在做了一些与 binutils 相关的事情后退出了
  • @ajabanto,35T 听起来太小了,无法容纳整个项目(网页推荐 100T,不确定实际使用情况和项目设置)。似乎您的 m4 太旧了 - lists.gnu.org/archive/html/m4-discuss/2013-01/msg00001.html,尝试从您的主机 linux 发行版的更新版本构建工具链(需要 GNU m4 1.4.13)。您当前的 Linux 版本是什么(debian ubuntu 之类的)?我认为 16.04 或 18.04 或 debian 10 可能会工作。
  • 您好!我知道,关于 arty a7,我们这里有其他板子我可以尝试,但我想我会在构建所需工具后解决这个问题。现在我目前使用的是 ubuntu 14.04,但是我将无法更新到更新的版本,因为我认为由于芯片组的原因,更新的版本不适用于我的工作站。我会尝试看看我是否可以获得更新版本的 m4。再次感谢您的帮助,我会在尝试您的建议后尽快更新帖子
  • @ajabanto,你可以试试虚拟机在里面运行最近的linux。
  • 我尝试在虚拟机上运行 Ubuntu 18.04 并且确实如此,我能够成功构建 riscv-toolchain 而没有任何真正的错误,非常感谢!我还有其他问题,我会尽快更新帖子的上下文。
【解决方案2】:

我发现 RISC-V 工具链在操作系统依赖方面非常脆弱。工具链团队使用的是 Ubuntu 16,人们看到的很多错误都源于该版本以来 Linux 生态系统的变化。

我通过创建一个配置为使用 Ubuntu 16 的 Vagrantfile 解决了这个问题,并通过了官方步骤,至少对我来说,它构建的工具很好。如果您有兴趣,请在the stackoverflow question I asked along these lines 内发布。如果您需要以不同方式配置工具,可以在 Vagrantfile 中轻松完成。

【讨论】:

    【解决方案3】:

    试试这个版本的整数 riscv。我已经试过了,通过了。

    git clone https://github.com/riscv/riscv-gnu-toolchain  
    git checkout 411d134  
    git submodule update --init --recursive  
    mkdir build  
    cd build  
    ../configure --prefix=/opt/riscv32i --with-arch=rv32i --with-abi=ilp32  
    make -j8  
    

    如果你的 riscv 有 mul/div 模块,添加 M 标准扩展。

    ../configure --prefix=/opt/riscv32im --with-arch=rv32im --with-abi=ilp32
    

    如果你的 riscv 是 64 位整数内核:

    ../configure --prefix=/opt/riscv64i --with-arch=riscv64i --with-abi=lp64   
    

    选择您要构建的选项:
    整数乘除法的“M”标准扩展
    原子指令的“A”标准扩展
    单精度浮点的“F”标准扩展
    双精度浮点的“D”标准扩展
    四精度浮点的“Q”标准扩展
    压缩指令的“C”标准扩展
    I、M、A、F、D的“G”组合。

    ilp32/ilp32f/ilp32d int-32bits long-32bits pointer-32bits
    lp64/lp64f/lp64d int-32bits long-64bits pointer-64bits

    vexrisc 完整项目在 arty a7 35t 上实现 riscv,包括工具链编译和使用 IntelliJ IDE 构建 riscv 项目和内部 USB jtag 调试可能会对您有所帮助。

    https://fatalfeel.blogspot.com/2013/12/risc-v-on-arty-a7-35t.html

    也许您想在 riscv 上尝试 Linux。它基于 vexrisc

    https://github.com/SpinalHDL/SaxonSoc

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-18
      • 2016-04-23
      • 2015-06-27
      • 2011-07-15
      • 1970-01-01
      相关资源
      最近更新 更多