【问题标题】:Is compiling GCC as static toolchain and plugins support mutually exclusive?将 GCC 编译为静态工具链和插件是否支持互斥?
【发布时间】:2021-09-14 22:47:09
【问题描述】:

我正在使用 crosstool-ng 交叉编译 AVR GCC 以在 Android 上使用。我需要使用 LTO 支持(-flto-fuse-linker-plugin)对其进行编译,从而在 .config 中传递 CT_STATIC_TOOLCHAIN=yCT_CC_GCC_USE_LTO=yCT_CC_GCC_ENABLE_PLUGINSCT_CC_SHARED_LIBSCT_BINUTILS_PLUGINS=y

就是这样配置的(build.log的一部分):

[EXTRA] 配置最终 gcc 编译器 [调试] 额外配置通过:'--with-headers=/home/anton/x-tools/HOST-aarch64-linux-gnu/avr/avr/include --with-newlib --enable-threads=no --禁用共享 --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-目标-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-libs tdcxx=-static-libgcc -Wl,-Bstatic,-lstdc++ -lm' '--enable-target-optspace' '--disable-nls' '--enable-multiarch' '--enable-languages=c,c++ ' '--启用插件'

它会导致以下构建错误:

 > 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,剥离

【问题讨论】:

    标签: android gcc cross-compiling avr-gcc crosstool-ng


    【解决方案1】:

    不,gcc 工具链不支持它。 如果您使用ˋct-ng menuconfigˋ(而不是将self写入.config),则不能同时选择两者 由于这样的许多限制,我不使用静态链接。

    【讨论】:

    • 您的意思是不可能创建带有插件支持的静态链接 GCC(记住“加拿大构建”并且完全独立于链接器二进制文件)?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-26
    • 1970-01-01
    • 2018-09-07
    • 1970-01-01
    • 1970-01-01
    • 2011-06-13
    • 1970-01-01
    相关资源
    最近更新 更多