背景:glibc 构建i686版本出现编译问题,错误日志如下:
定位过程:
libc_pic.a -> libc_pic.os -> libc_pic.os.clean -> libc.so -> libc.so.6.new -> libc.so.6
依次查看动态库中是否存在__libc_vfork,在生成libc.so后没有了
具体编译命令如下:
gcc -shared -static-libgcc -Wl,-O1 -Wl,-z,defs -Wl,-dynamic-linker=/lib/ld-linux.so.2
-B/home/abuild/rpmbuild/BUILD/glibc-2.34/build-i686-openEuler-linux/csu/
-Wl,--version-script=/home/abuild/rpmbuild/BUILD/glibc-2.34/build-i686-openEuler-linux/libc.map
-Wl,-soname=libc.so.6 -Wl,-z,combreloc -Wl,-z,relro -Wl,--hash-style=both -Wl,-z,now -nostdlib -nostartfiles -e __libc_main
-L/home/abuild/rpmbuild/BUILD/glibc-2.34/build-i686-openEuler-linux
-L/home/abuild/rpmbuild/BUILD/glibc-2.34/build-i686-openEuler-linux/math
-L/home/abuild/rpmbuild/BUILD/glibc-2.34/build-i686-openEuler-linux/elf
-L/home/abuild/rpmbuild/BUILD/glibc-2.34/build-i686-openEuler-linux/dlfcn
-L/home/abuild/rpmbuild/BUILD/glibc-2.34/build-i686-openEuler-linux/nss
-L/home/abuild/rpmbuild/BUILD/glibc-2.34/build-i686-openEuler-linux/nis
-L/home/abuild/rpmbuild/BUILD/glibc-2.34/build-i686-openEuler-linux/rt
-L/home/abuild/rpmbuild/BUILD/glibc-2.34/build-i686-openEuler-linux/resolv
-L/home/abuild/rpmbuild/BUILD/glibc-2.34/build-i686-openEuler-linux/mathvec
-L/home/abuild/rpmbuild/BUILD/glibc-2.34/build-i686-openEuler-linux/support
-L/home/abuild/rpmbuild/BUILD/glibc-2.34/build-i686-openEuler-linux/nptl -Wl,-rpath-link=/home/abuild/rpmbuild/BUILD/glibc-2.34/build-i686-openEuler-linux:/home/abuild/rpmbuild/BUILD/glibc-2.34/build-i686-openEuler-linux/math:/home/abuild/rpmbuild/BUILD/glibc-2.34/build-i686-openEuler-linux/elf:/home/abuild/rpmbuild/BUILD/glibc-2.34/build-i686-openEuler-linux/dlfcn:/home/abuild/rpmbuild/BUILD/glibc-2.34/build-i686-openEuler-linux/nss:/home/abuild/rpmbuild/BUILD/glibc-2.34/build-i686-openEuler-linux/nis:/home/abuild/rpmbuild/BUILD/glibc-2.34/build-i686-openEuler-linux/rt:/home/abuild/rpmbuild/BUILD/glibc-2.34/build-i686-openEuler-linux/resolv:/home/abuild/rpmbuild/BUILD/glibc-2.34/build-i686-openEuler-linux/mathvec:/home/abuild/rpmbuild/BUILD/glibc-2.34/build-i686-openEuler-linux/support:/home/abuild/rpmbuild/BUILD/glibc-2.34/build-i686-openEuler-linux/nptl
-o /home/abuild/rpmbuild/BUILD/glibc-2.34/build-i686-openEuler-linux/libc.so
/home/abuild/rpmbuild/BUILD/glibc-2.34/build-i686-openEuler-linux/csu/abi-note.o
-Wl,--whole-archive /home/abuild/rpmbuild/BUILD/glibc-2.34/build-i686-openEuler-linux/libc_pic.os.clean -Wl,--no-whole-archive
/home/abuild/rpmbuild/BUILD/glibc-2.34/build-i686-openEuler-linux/elf/interp.os
/home/abuild/rpmbuild/BUILD/glibc-2.34/build-i686-openEuler-linux/elf/ld.so
-lgcc /home/abuild/rpmbuild/BUILD/glibc-2.34/build-i686-openEuler-linux/elf/sofini.os
尝试寻找的解决方案:
1、-Wl,--whole-archive /home/abuild/rpmbuild/BUILD/glibc-2.34/build-i686-openEuler-linux/libc_pic.os.clean -Wl,--no-whole-archive
2、-u __libc_vfork
以上两种方法均没有效果
https://stackoverflow.com/questions/24232726/symbol-is-lost-after-linking-shared-library
怀疑是gcc 10.3.0在i686架构下有什么特殊机制,麻烦帮忙定位下,谢谢~
Hi zhangyiru330, welcome to the openEuler Community.
I'm the Bot here serving you. You can find the instructions on how to interact with me at Here.
If you have any questions, please contact the SIG: Compiler, and any of the maintainers: @Haijian.Zhang , @CharlieZhao95 , @shihai1991 , @Noah , @eastb233 , @jiangfeilong , @HsError , @kuen , @guoge , @Peixin Qiao , @wangyadong , @Ryan Peng , @Peilin Guo
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
非标准openEuler X86_64 AArch64版本,同步源码构建的其他架构版本。
@wangding16 瞅瞅
@Xayahion 能否把构建glibc更改的spec的地方同步一下?
登录 后才可以发表评论