程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了使用 -O3 -flto 编译 glibc 失败,部分类型冲突大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决使用 -O3 -flto 编译 glibc 失败,部分类型冲突?

开发过程中遇到使用 -O3 -flto 编译 glibc 失败,部分类型冲突的问题如何解决?下面主要结合日常开发的经验,给出你关于使用 -O3 -flto 编译 glibc 失败,部分类型冲突的解决方法建议,希望对你解决使用 -O3 -flto 编译 glibc 失败,部分类型冲突有所启发或帮助;

我正在为 AArch64 引导 linux。@H_801_3@

glibc 2.33 无法使-O3 -flto 编译。配置由@H_801_3@完成

../glibc-2.33/configure --prefix=/usr --build=x86_64-linux-gnu --host=aarch64-linux-gnu --enable-kernel=5.12.3 --with-headers=/target/usr/include CFLAGS="-O3 -flto" CXXFLAGS="-O3 -flto" LDFLAGS="-O3 -flto" libc_cv_slibdir=/usr/lib

编译时报错@H_801_3@

aarch64-linux-gnu-gcc ../sysdeps/unix/sysv/linux/aarch64/libc-start.c -c -std=gnu11 -fgnu89-inline  -O3 -flto -Wall -Wwrite-Strings -Wundef -Werror -fmerge-all-constants -frounding-math -fno-stack-protector -WStrict-prototypes -Wold-style-deFinition -fmath-errno   -fPIC -fno-stack-protector -DSTACK_PROTECTOR_LEVEL=0 -funwind-tables  -ftls-model=initial-exec      -I../include -I/cross/build/csu  -I/cross/build  -I../sysdeps/unix/sysv/linux/aarch64  -I../sysdeps/aarch64/nptl  -I../sysdeps/unix/sysv/linux/generic  -I../sysdeps/unix/sysv/linux/wordsize-64  -I../sysdeps/unix/sysv/linux/include -I../sysdeps/unix/sysv/linux  -I../sysdeps/nptl  -I../sysdeps/pthread  -I../sysdeps/gnu  -I../sysdeps/unix/inet  -I../sysdeps/unix/sysv  -I../sysdeps/unix  -I../sysdeps/posix  -I../sysdeps/aarch64/fpu  -I../sysdeps/aarch64/multiarch  -I../sysdeps/aarch64  -I../sysdeps/wordsize-64  -I../sysdeps/IEee754/ldbl-128  -I../sysdeps/IEee754/dbl-64  -I../sysdeps/IEee754/flt-32  -I../sysdeps/IEee754  -I../sysdeps/generic  -I.. -I../libio -I. -nostdinc -isystem /cross/local/lib/gcc/aarch64-linux-gnu/11.1.0/include -isystem /cross/local/lib/gcc/aarch64-linux-gnu/11.1.0/include-fixed -isystem /cross/target/usr/include -D_liBC_REENTRANT -include /cross/build/libc-modules.h -DMODulE_name=libc -include ../include/libc-symbols.h  -DPIC -DSHARED     -Dtop_nameSPACE=glibc -o /cross/build/csu/libc-start.os -MD -MP -MF /cross/build/csu/libc-start.os.dt -MT /cross/build/csu/libc-start.os
In file included from ../sysdeps/aarch64/nptl/tls.h:37,from ../include/link.h:51,from ../include/dlfcn.h:4,from ../sysdeps/generic/ldsodefs.h:32,from ../sysdeps/aarch64/ldsodefs.h:47,from ../sysdeps/gnu/ldsodefs.h:46,from ../sysdeps/unix/sysv/linux/ldsodefs.h:25,from ../sysdeps/unix/sysv/linux/aarch64/ldsodefs.h:23,from ../csu/libc-start.c:26,from ../sysdeps/unix/sysv/linux/aarch64/libc-start.c:33:
../sysdeps/unix/sysv/linux/aarch64/sysdep.h:280:18: error: '__pointer_chk_guard' causes a section type conflict with '_rtld_global_ro'
  280 | extern uintptr_t __pointer_chk_guard attribute_relro;
      |                  ^~~~~~~~~~~~~~~~~~~
In file included from ../sysdeps/aarch64/ldsodefs.h:47,from ../sysdeps/unix/sysv/linux/aarch64/libc-start.c:33:
../sysdeps/generic/ldsodefs.h:678:36: note: '_rtld_global_ro' was declared here
  678 | extern const struct rtld_global_ro _rtld_global_ro
      |                                    ^~~~~~~~~~~~~~~
make[2]: *** [/cross/build/sysd-rules:25: /cross/build/csu/libc-start.os] Error 1
make[2]: Leaving directory '/cross/sources/glibc-2.33/csu'
make[1]: *** [Makefile:479: csu/subdir_lib] Error 2
make[1]: Leaving directory '/cross/sources/glibc-2.33'
make: *** [Makefile:9: all] Error 2

交叉编译 GCC 由@H_801_3@构建

../gcc-11.1.0/configure --prefix=/opt/cross --with-sysroot=/target --build=x86_64-linux-gnu --target=aarch64-linux-gnu --enable-languages=c,c++ --disable-nls --disable-threads --disable-shared --without-headers --with-newlib --with-glibc-version=2.33 CFLAGS_FOR_TARGET="-O3 -flto" CXXFLAGS_FOR_TARGET="-O3 -flto" LDFLAGS_FOR_TARGET="-O3 -flto"
make all-gcc all-target-libgcc
make install-gcc install-target-libgcc

做了一些初步调查,发现 glibc 的作者在有问题的标头 sysdeps/generic/ldsodefs.h 中加入了一些技巧,使 _rtld_global_ro 在动态链接时可修改,否则 const。我认为这些技巧并不严格符合标准,但如果我删除所有 -O3 -flto 东西,它们编译时没有问题,如果我重新添加这些标志,则会生成上述错误。@H_801_3@

我想知道:@H_801_3@

  • 有没有人成功地使用 -O3 -flto 引导 glibc?这样做的正确方法是什么?
  • 或者,它是否被视为不受支持的场景,不应尝试?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!@H_801_3@

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。@H_801_3@

小编邮箱:dio#foxmail.com (将#修改为@)@H_801_3@

大佬总结

以上是大佬教程为你收集整理的使用 -O3 -flto 编译 glibc 失败,部分类型冲突全部内容,希望文章能够帮你解决使用 -O3 -flto 编译 glibc 失败,部分类型冲突所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。