gpt4 book ai didi

gcc - 如何解决编译GCC本身时的 '__tls_get_addr@@GLIBC_2.3'错误?

转载 作者:行者123 更新时间:2023-12-01 19:02:40 26 4
gpt4 key购买 nike

背景: 客户端拥有一组旧版 SuSE 服务器,需要更新 glibc 来修补“Ghost”漏洞。这些机器从未更新过,并且运行的是 2005 年左右的旧版本 gcc 和 glibc。尝试编译当前的 glibc 会出现错误,提示需要更新的 gcc,因此我尝试升级 gcc。

问题:在为 gcc 进行 make 的过程中,它失败了,并出现以下错误(简短版本 - 较长的版本,稍后发布):

undefined reference to symbol '__tls_get_addr@@GLIBC_2.3'
/lib64/ld-linux-x86-64.so.2: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status

已经尝试过的研究和调查:

通过谷歌搜索我知道这是一个链接器问题。包括ld在内的gcc基础设施系统已全部成功升级至binutils-2.25

我尝试更改 LDFLAGS =LDFLAGS = -lz在 Makefile 中,建议修复影响 Oracle 安装的类似问题,但这没有什么区别。

我尝试安装稍旧的 gcc(4.8 而不是 4.92),在同一位置给出相同的错误。

不幸的是,尝试搜索与编译 gcc 本身相关的问题往往会产生大量有关使用 gcc 编译其他内容的结果,从而使搜索变得困难。

详细背景和错误消息:

安装 gcc 有许多先决条件,在进行此安装之前,我必须升级 gmp、mpfr 和 mpc。 Gmp 和 mpfr 安装成功,但只能通过添加 --disable-shared 来编译 mpc到 ./configure 命令。

已安装内容的完整列表:

binutils-2.25, gmp-4.3.2, mpfr-2.4.2, mpc-0.8.1

配置命令(按照 gcc 团队的建议从相邻的构建目录运行):

../gcc-4.9.2/configure --with-gmp=/usr/local --with-mpfr=/usr/local --with-mpc=/usr/local

完整的错误消息:

make[3]: Entering directory /usr/local/src/gcc-4.9.2-build/gcc'
/usr/local/src/gcc-4.9.2-build/./prev-gcc/xg++
-B/usr/local/src/gcc-4.9.2-build/./prev-gcc/ -B/usr/local/x86_64-unknown-linux-gnu/bin/ -nostdinc++ -B/usr/local/src/gcc-4.9.2-build/prev-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs
-B/usr/local/src/gcc-4.9.2-build/prev-x86_64-unknown-linux-gnu/libstdc++-v3/libsupc++/.libs -I/usr/local/src/gcc-4.9.2-build/prev-x86_64-unknown-linux-gnu/libstdc++-v3/include/x86_64-unknown-linux-gnu
-I/usr/local/src/gcc-4.9.2-build/prev-x86_64-unknown-linux-gnu/libstdc++-v3/include
-I/usr/local/src/gcc-4.9.2/libstdc++-v3/libsupc++ -L/usr/local/src/gcc-4.9.2-build/prev-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs
-L/usr/local/src/gcc-4.9.2-build/prev-x86_64-unknown-linux-gnu/libstdc++-v3/libsupc++/.libs -g -O2 -gtoggle -DIN_GCC -fno-exceptions -fno-rtti -fasynchronous-unwind-tables -W -Wall -Wno-narrowing -Wwrite-strings -Wcast-qual -Wmissing-format-attribute -pedantic -Wno-long-long -Wno-variadic-macros -Wno-overlength-strings -DHAVE_CONFIG_H -static-libstdc++ -static-libgcc -o cc1 c/c-lang.o c-family/stub-objc.o attribs.o c/c-errors.o c/c-decl.o c/c-typeck.o
c/c-convert.o c/c-aux-info.o c/c-objc-common.o c/c-parser.o
c/c-array-notation.o c-family/c-common.o c-family/c-cppbuiltin.o
c-family/c-dump.o c-family/c-format.o c-family/c-gimplify.o
c-family/c-lex.o c-family/c-omp.o c-family/c-opts.o c-family/c-pch.o
c-family/c-ppoutput.o c-family/c-pragma.o c-family/c-pretty-print.o
c-family/c-semantics.o c-family/c-ada-spec.o c-family/c-cilkplus.o
c-family/array-notation-common.o c-family/cilk.o c-family/c-ubsan.o
i386-c.o glibc-c.o \ cc1-checksum.o libbackend.a main.o
libcommon-target.a libcommon.a ../libcpp/libcpp.a
../libdecnumber/libdecnumber.a libcommon.a ../libcpp/libcpp.a<br/>
../libbacktrace/.libs/libbacktrace.a ../libiberty/libiberty.a
../libdecnumber/libdecnumber.a -L/usr/local/lib -L/usr/local/lib
-L/usr/local/lib -lmpc -lmpfr -lgmp -rdynamic -ldl -L../zlib -lz /usr/local/x86_64-unknown-linux-gnu/bin/ld:
/usr/local/src/gcc-4.9.2-build/prev-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.a(eh_globals.o):
undefined reference to symbol '__tls_get_addr@@GLIBC_2.3'
/lib64/ld-linux-x86-64.so.2: error adding symbols: DSO missing from
command line collect2: error: ld returned 1 exit status make[3]: ***
[cc1] Error 1 make[3]: Leaving directory
/usr/local/src/gcc-4.9.2-build/gcc' make[2]: * [all-stage2-gcc] Error 2 make[2]: Leaving directory /usr/local/src/gcc-4.9.2-build'
make[1]: *** [stage2-bubble] Error 2 make[1]: Leaving directory
/usr/local/src/gcc-4.9.2-build' make: *
[all] Error 2

最佳答案

在 Centos 4.9 机器上将 binutils 升级到 2.26 后,我遇到了类似的问题。较新的链接器需要包含/lib64/ld-linux-x86-64.so.2,但需要将它们包含在 DSO 列表 win 选项的末尾 --as-needed

为了正确起见,请通过编译器调用链接器并将以下粗体内容添加到/usr/lib64/libc.so

/* GNU ld 脚本 使用共享库,但有些功能只能在 静态库,所以再尝试一下。 */OUTPUT_FORMAT(elf64-x86-64)组(/lib64/libc.so.6/usr/lib64/libc_nonshared.a AS_NEEDED(/lib64/ld-linux-x86-64.so.2))

这对我有用

关于gcc - 如何解决编译GCC本身时的 '__tls_get_addr@@GLIBC_2.3'错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28198965/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com