linux 交叉编译 gcc 10.1.0 for avr 失败
cross compile gcc 10.1.0 for avr fails on linux
我尝试在 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 进行编译,并使用 link 和 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 ; \
)
您安装了没有 --exec-prefix
的 AVR binutils 并将其放入您的 PATH
中,无意中破坏了您的正常 gcc
。你在这里看到的是本地机器的 g++
运行 as
到 assemble ,这似乎是一个 64 位系统。不幸的是,它在 PATH
中找到的 as
不知道该目标。在例如Debian GNU/Linux,您可以安装 binutils 以支持包 binutils-multiarch
中的多种体系结构,或特定平台,例如binutils-avr
.
从 $PATH
中删除 /opt/avr_10.1.0/avr/bin
后,您的 gcc
应该可以正常工作。
对于 gcc-help,我得到了以下有效解决方案:
Looks like a PATH environment variable problem. Do you have "." (dot)
on your path? In the gcc build tree, we create a script/link called
as for the cross compiler to use. But if you have dot on your path,
before /usr/bin, then this script/link will be used with the native
gcc instead of the native as, and your build can fail like this.
删除后。 (点)从我的 $PATH 一切正常!
顺便说一句:与 9.3 相比,gcc10 将 avr 上的代码大小减少了 >40%。太棒了!
我尝试在 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 进行编译,并使用 link 和 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 ; \
)
您安装了没有 --exec-prefix
的 AVR binutils 并将其放入您的 PATH
中,无意中破坏了您的正常 gcc
。你在这里看到的是本地机器的 g++
运行 as
到 assemble ,这似乎是一个 64 位系统。不幸的是,它在 PATH
中找到的 as
不知道该目标。在例如Debian GNU/Linux,您可以安装 binutils 以支持包 binutils-multiarch
中的多种体系结构,或特定平台,例如binutils-avr
.
从 $PATH
中删除 /opt/avr_10.1.0/avr/bin
后,您的 gcc
应该可以正常工作。
对于 gcc-help,我得到了以下有效解决方案:
Looks like a PATH environment variable problem. Do you have "." (dot) on your path? In the gcc build tree, we create a script/link called as for the cross compiler to use. But if you have dot on your path, before /usr/bin, then this script/link will be used with the native gcc instead of the native as, and your build can fail like this.
删除后。 (点)从我的 $PATH 一切正常!
顺便说一句:与 9.3 相比,gcc10 将 avr 上的代码大小减少了 >40%。太棒了!