我正在使用 crosstool-ng 交叉编译 AVR GCC 以在 Android 上使用。我需要使用 LTO 支持 (-flto
和) 编译它,-fuse-linker-plugin
从而传递CT_STATIC_TOOLCHAIN=y
, CT_CC_GCC_USE_LTO=y
,和in 。CT_CC_GCC_ENABLE_PLUGINS
CT_CC_SHARED_LIBS
CT_BINUTILS_PLUGINS=y
.config
这就是它的配置方式(部分build.log
):
[EXTRA] 配置最终 gcc 编译器 [DEBUG] 额外配置通过:'--with-headers=/home/anton/x-tools/HOST-aarch64-linux-gnu/avr/avr/include --with-newlib -- enable-threads=no --disable-shared --with-pkgversion=crosstool-NG 1.24.0-rc3.1-f7b1ece --disable-__cxa_atexit --disable-libgomp --disable-libmudflap --disable-libmpx -- disable-libssp --disable-libquadmath --disable-libquadmath-support --with-gmp=/home/anton/esp8266-2/crosstool-NG/installed/bin/.build/HOST-aarch64-linux-gnu/avr /buildtools --with-mpfr=/home/anton/esp8266-2/crosstool-NG/installed/bin/.build/HOST-aarch64-linux-gnu/avr/buildtools --with-mpc=/home/anton/ esp8266-2/crosstool-NG/installed/bin/.build/HOST-aarch64-linux-gnu/avr/buildtools --enable-lto --with-host-libstdcxx=-static-libgcc -Wl,-Bstatic,- lstdc++ -lm --enable-target-optspace --disable-nls --enable-multiarch'[DEBUG] ==> 执行:CC_FOR_BUILD='x86_64-build_pc-linux-gnu-gcc' CFLAGS='-O2 -g -I/home/anton/esp8266-2/crosstool-NG/installed/bin/.build/ HOST-aarch64-linux-gnu/avr/buildtools/include 'CFLAGS_FOR_BUILD='-O2 -g -I/home/anton/esp8266-2/crosstool-NG/installed/bin/.build/HOST-aarch64-linux-gnu /avr/buildtools/include 'CXXFLAGS='-O2 -g -I/home/anton/esp8266-2/crosstool-NG/installed/bin/.build/HOST-aarch64-linux-gnu/avr/buildtools/include ' CXXFLAGS_FOR_BUILD='-O2 -g -I/home/anton/esp8266-2/crosstool-NG/installed/bin/.build/HOST-aarch64-linux-gnu/avr/buildtools/include 'LDFLAGS='-L/home /anton/esp8266-2/crosstool-NG/installed/bin/.build/HOST-aarch64-linux-gnu/avr/buildtools/lib -static -lstdc++ -lm' CFLAGS_FOR_TARGET='-idirafter /home/anton/x-tools/HOST-aarch64-linux-gnu/avr/avr/include' CXXFLAGS_FOR_TARGET=' -idirafter /home/anton/x-tools/HOST-aarch64-linux-gnu/avr/avr /include'LDFLAGS_FOR_TARGET='''/bin/bash''/home/anton/esp8266-2/crosstool-NG/installed/bin/.build/HOST-aarch64-linux-gnu/avr/src/gcc/configure' '--build=x86_64-build_pc-linux-gnu' '--host=x86_64-build_pc-linux-gnu' '--target=avr' '--prefix=/home/anton/esp8266-2/crosstool-NG /installed/bin/.build/HOST-aarch64-linux-gnu/avr/buildtools''--with-local-prefix=/home/anton/x-tools/HOST-aarch64-linux-gnu/avr/avr' '--with-headers=/home/anton/x-tools/HOST-aarch64-linux-gnu/avr/avr/include' '--with-newlib' '--enable-threads=no' '--disable -shared''--with-pkgversion=crosstool-NG 1.24.0-rc3。1-f7b1ece''--disable-__cxa_atexit'''--disable-libgomp''--disable-libmudflap''--disable-libmpx''--disable-libssp''--disable-libquadmath''--disable -libquadmath-support' '--with-gmp=/home/anton/esp8266-2/crosstool-NG/installed/bin/.build/HOST-aarch64-linux-gnu/avr/buildtools' '--with-mpfr =/home/anton/esp8266-2/crosstool-NG/installed/bin/.build/HOST-aarch64-linux-gnu/avr/buildtools'--with-mpc=/home/anton/esp8266-2/crosstool -NG/installed/bin/.build/HOST-aarch64-linux-gnu/avr/buildtools''--enable-lto''--with-host-libstdcxx=-static-libgcc -Wl,-Bstatic,-lstdc++ -lm' '--enable-target-optspace' '--disable-nls' '--enable-multiarch' '--enable-languages=c,c++' '--enable-plugin'--disable-__cxa_atexit' '--disable-libgomp' '--disable-libmudflap' '--disable-libmpx' '--disable-libssp' '--disable-libquadmath' '--disable-libquadmath-support' '--with-gmp=/home/anton/esp8266-2/crosstool-NG/installed/bin/.build/HOST-aarch64-linux-gnu/avr/buildtools' '--with-mpfr=/home/anton /esp8266-2/crosstool-NG/installed/bin/.build/HOST-aarch64-linux-gnu/avr/buildtools' '--with-mpc=/home/anton/esp8266-2/crosstool-NG/installed/ bin/.build/HOST-aarch64-linux-gnu/avr/buildtools' '--enable-lto' '--with-host-libstdcxx=-static-libgcc -Wl,-Bstatic,-lstdc++ -lm' '- -enable-target-optspace' '--disable-nls' '--enable-multiarch' '--enable-languages=c,c++' '--enable-plugin'--disable-__cxa_atexit' '--disable-libgomp' '--disable-libmudflap' '--disable-libmpx' '--disable-libssp' '--disable-libquadmath' '--disable-libquadmath-support' '--with-gmp=/home/anton/esp8266-2/crosstool-NG/installed/bin/.build/HOST-aarch64-linux-gnu/avr/buildtools' '--with-mpfr=/home/anton /esp8266-2/crosstool-NG/installed/bin/.build/HOST-aarch64-linux-gnu/avr/buildtools' '--with-mpc=/home/anton/esp8266-2/crosstool-NG/installed/ bin/.build/HOST-aarch64-linux-gnu/avr/buildtools' '--enable-lto' '--with-host-libstdcxx=-static-libgcc -Wl,-Bstatic,-lstdc++ -lm' '- -enable-target-optspace' '--disable-nls' '--enable-multiarch' '--enable-languages=c,c++' '--enable-plugin'--disable-libmudflap' '--disable-libmpx' '--disable-libssp' '--disable-libquadmath' '--disable-libquadmath-support' '--with-gmp=/home/anton/esp8266- 2/crosstool-NG/installed/bin/.build/HOST-aarch64-linux-gnu/avr/buildtools'--with-mpfr=/home/anton/esp8266-2/crosstool-NG/installed/bin/. build/HOST-aarch64-linux-gnu/avr/buildtools'--with-mpc=/home/anton/esp8266-2/crosstool-NG/installed/bin/.build/HOST-aarch64-linux-gnu/avr /buildtools' '--enable-lto' '--with-host-libstdcxx=-static-libgcc -Wl,-Bstatic,-lstdc++ -lm' '--enable-target-optspace' '--disable-nls' '--enable-multiarch' '--enable-languages=c,c++' '--enable-plugin'--disable-libmudflap' '--disable-libmpx' '--disable-libssp' '--disable-libquadmath' '--disable-libquadmath-support' '--with-gmp=/home/anton/esp8266- 2/crosstool-NG/installed/bin/.build/HOST-aarch64-linux-gnu/avr/buildtools'--with-mpfr=/home/anton/esp8266-2/crosstool-NG/installed/bin/. build/HOST-aarch64-linux-gnu/avr/buildtools'--with-mpc=/home/anton/esp8266-2/crosstool-NG/installed/bin/.build/HOST-aarch64-linux-gnu/avr /buildtools' '--enable-lto' '--with-host-libstdcxx=-static-libgcc -Wl,-Bstatic,-lstdc++ -lm' '--enable-target-optspace' '--disable-nls' '--enable-multiarch' '--enable-languages=c,c++' '--enable-plugin'--disable-libquadmath-support''--with-gmp=/home/anton/esp8266-2/crosstool-NG/installed/bin/.build/HOST-aarch64-linux-gnu/avr/buildtools''-- with-mpfr=/home/anton/esp8266-2/crosstool-NG/installed/bin/.build/HOST-aarch64-linux-gnu/avr/buildtools' '--with-mpc=/home/anton/esp8266- 2/crosstool-NG/installed/bin/.build/HOST-aarch64-linux-gnu/avr/buildtools''--enable-lto''--with-host-libstdcxx=-static-libgcc -Wl,-Bstatic ,-lstdc++ -lm' '--enable-target-optspace' '--disable-nls' '--enable-multiarch' '--enable-languages=c,c++' '--enable-plugin'--disable-libquadmath-support''--with-gmp=/home/anton/esp8266-2/crosstool-NG/installed/bin/.build/HOST-aarch64-linux-gnu/avr/buildtools''-- with-mpfr=/home/anton/esp8266-2/crosstool-NG/installed/bin/.build/HOST-aarch64-linux-gnu/avr/buildtools' '--with-mpc=/home/anton/esp8266- 2/crosstool-NG/installed/bin/.build/HOST-aarch64-linux-gnu/avr/buildtools''--enable-lto''--with-host-libstdcxx=-static-libgcc -Wl,-Bstatic ,-lstdc++ -lm' '--enable-target-optspace' '--disable-nls' '--enable-multiarch' '--enable-languages=c,c++' '--enable-plugin'build/HOST-aarch64-linux-gnu/avr/buildtools'--with-mpc=/home/anton/esp8266-2/crosstool-NG/installed/bin/.build/HOST-aarch64-linux-gnu/avr /buildtools' '--enable-lto' '--with-host-libstdcxx=-static-libgcc -Wl,-Bstatic,-lstdc++ -lm' '--enable-target-optspace' '--disable-nls' '--enable-multiarch' '--enable-languages=c,c++' '--enable-plugin'build/HOST-aarch64-linux-gnu/avr/buildtools'--with-mpc=/home/anton/esp8266-2/crosstool-NG/installed/bin/.build/HOST-aarch64-linux-gnu/avr /buildtools' '--enable-lto' '--with-host-libstdcxx=-static-libgcc -Wl,-Bstatic,-lstdc++ -lm' '--enable-target-optspace' '--disable-nls' '--enable-multiarch' '--enable-languages=c,c++' '--enable-plugin'
它会导致以下构建错误:
> liblto_plugin building gcc with plugin support requires a host that supports -fPIC, -shared, -ldl and -rdynamic.
它似乎有静态(不依赖于任何东西)和“带插件”听起来是相互排斥的。这是对的吗?
有没有办法不使用 lto_plugin 共享库而是静态地(并且仍然调用-flto
)来构建它?
PS。我可以避免静态链接它,但我不希望它动态链接:
/tmp/avr-gcc.dynamic//avr/bin/avr-gcc:ELF 64 位 LSB 可执行文件,ARM aarch64,版本 1 (SYSV),动态链接,解释器 /lib/ld-,适用于 GNU/Linux 3.7。 0,BuildID[sha1]=3a743be83f76347643d78fcdba6e81444b76c3d0,剥离