【问题标题】:cross compile gcc 10.1.0 for avr fails on linux在 Linux 上交叉编译 gcc 10.1.0 for avr 失败
【发布时间】:2020-07-16 08:55:49
【问题描述】:

我尝试在 linux 上为 avr 编译当前的 gcc 版本 10.1.0,但它失败了。

'/home/krud/git_my_checkout/first/own_components/gcc_install/gcc/gcc-10.1.0/build/gcc'
g++ -c   -g -O2 -DIN_GCC  -DCROSS_DIRECTORY_STRUCTURE   -fno-exceptions
-fno-rtti -fasynchronous-unwind-tables -W -Wall -Wno-narrowing
-Wwrite-strings -Wcast-qual -Wno-error=format-diag
-Wmissing-format-attribute -Woverloaded-virtual -pedantic -Wno-long-long
-Wno-variadic-macros -Wno-overlength-strings   -DHAVE_CONFIG_H
-DGENERATOR_FILE -fno-PIE -I. -Ibuild -I../../gcc -I../../gcc/build
-I../../gcc/../include  -I../../gcc/../libcpp/include  \
    -o build/genmodes.o ../../gcc/genmodes.c
/opt/avr_10.1.0/avr/bin/as: unrecognized option '--64'

正如我所见,它尝试使用 linux gcc 来编译和链接 avr-as,它是 错误的。我做错了什么/我可以改变什么?

我做了什么:

make binutils
make gcc 

使用以下 Makefile

PREFIX=/opt
VERSION_BINUTILS=2.34
VERSION_GCC=10.1.0
GCC_DOWNLOAD_SUBDIR=gcc-10.1.0
MPC_VERSION=1.0.3
MPFR_VERSION=3.1.4
GMP_VERSION=6.1.0

binutils:
    mkdir binutils
    ( cd binutils; \
        wget https://ftp.gnu.org/gnu/binutils/binutils-2.34.tar.xz; \
        tar xf binutils-2.34.tar.xz ; \
        cd binutils-2.34 ; \
        mkdir build ; \
        cd build ; \
        ../configure --target=avr --prefix=$(PREFIX)/avr_$(VERSION_GCC) ;\
        make -j8 ; \
        sudo make install ; \
        )

gcc:
    mkdir gcc
    ( cd gcc; \
        wget https://ftp.gnu.org/gnu/gcc/$(GCC_DOWNLOAD_SUBDIR)/gcc-$(VERSION_GCC).tar.xz ; \
        tar xf gcc-$(VERSION_GCC).tar.xz ; \
        cd gcc-$(VERSION_GCC)/ ; \
        wget https://gcc.gnu.org/pub/gcc/infrastructure/mpc-$(MPC_VERSION).tar.gz ; \
        tar xf mpc-$(MPC_VERSION).tar.gz ; \
        mv mpc-$(MPC_VERSION) ./mpc ; \
        wget https://gcc.gnu.org/pub/gcc/infrastructure/mpfr-$(MPFR_VERSION).tar.bz2 ; \
        tar xf mpfr-$(MPFR_VERSION).tar.bz2 ; \
        mv mpfr-$(MPFR_VERSION) ./mpfr ; \
        wget https://gcc.gnu.org/pub/gcc/infrastructure/gmp-$(GMP_VERSION).tar.bz2 ; \
        tar xf gmp-$(GMP_VERSION).tar.bz2 ; \
        mv gmp-$(GMP_VERSION) ./gmp ; \
        mkdir build ; \
        cd build ; \
        ../configure --prefix=$(PREFIX)/avr_$(VERSION_GCC) --target=avr --enable-languages=c,c++ --enable-lto --disable-nls --disable-libssp ; \
        make -j8 ; \
        sudo make install ; \
        )

【问题讨论】:

标签: gcc cross-compiling avr


【解决方案1】:

通过安装没有--exec-prefix 的AVR binutils 并将其放入PATH,您无意中破坏了正常的gcc。你在这里看到的是g++ 运行as 为本地机器组装,这似乎是一个64 位系统。不幸的是,它在PATH 中找到的as 不知道该目标。例如在Debian GNU/Linux,您可以安装 binutils 以支持来自软件包 binutils-multiarch 的多种架构,或特定平台,例如binutils-avr.

$PATH 中删除/opt/avr_10.1.0/avr/bin 后,您的gcc 应该可以正常工作。

【讨论】:

  • 我在 binutils 和 gcc 配置中有 --prefix。所以我不相信我破坏了我的主机 gcc,还是我也看到了错误?对于 Fedora,我无法在当前版本中安装 binutils,因为它们目前没有提供最新的 avr 工具。 Fedora 上 avr 的 gcc 版本是 gcc 9.2。
  • 我应该在我的 makefile 中更改哪些内容以使两个安装步骤都运行?是 --exec-prefix=avr 吗?
  • 然后我查看了我的 /opt/avr_10.1.0/bin,发现所有内容都以 avr- 开头。您的意思是说我必须更改 --exec-prefix 仅用于 gcc 中的配置?
  • --prefix 是安装程序的位置,--exec-prefix 是它们被调用的前缀。这使您可以同时使用avr-asas。你的问题是你用一个不支持本地机器作为目标的程序覆盖了as
  • 不,我没有。如果我输入 as --version 我得到“GNU assembler version 2.34-3.fc32, This assembler is configured for a target of `x86_64-redhat-linux'” 似乎没问题。正如我在第三条评论中所写的,我在 /opt/avr_10.1.0/avr/bin 路径中从 binutils 创建的所有工具都以 avr-xxx 开头。这对我来说看起来不错。我无法按照我错过哪个配置选项的步骤进行操作。 binutils 或 gcc。以及 --exec-prefix 应该设置为什么。是 --exec-prefix=avr 吗?如果您可以从我发布的 makefile 中选择该行并将其更改并发布在您的答案中,那就太好了。我会检查的!
【解决方案2】:

对于 gcc-help,我得到了以下可行的解决方案:

看起来像 PATH 环境变量问题。你有 ”。” (点) 在你的路上?在 gcc 构建树中,我们创建了一个名为 至于使用的交叉编译器。但如果你的道路上有点, 在 /usr/bin 之前,则此脚本/链接将与本机一起使用 gcc 而不是原生 as,你的构建可能会像这样失败。

删除后。 (点)从我的 $PATH 一切正常!

顺便说一句:与 9.3 相比,gcc10 将 avr 上的代码大小减少了 >40%。太好了!

【讨论】:

  • 我会仔细查看生成的“小 40%”代码,并验证所需代码的每一位仍然在那个更小的代码中实现。几年前,我遇到过avr-gcc 极端情况,编译器通过删除C 源代码明确要求的程序运行所必需的指令来缩小代码。他们最终修复了这个特定问题,但“小 40%”肯定会让我怀疑,而无需验证生成的代码。
  • @ndim:很清楚。更小的代码大小并不意味着更快的代码。如果没有内联 40% 很容易实现。我没有检查生成的程序集,但似乎代码仍在工作。如果没有,我会报告:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-03
  • 2016-03-09
  • 1970-01-01
  • 2019-07-18
相关资源
最近更新 更多