解决/lib64/libc.so.6: version `GLIBC_2.28‘ not found (required by

Posted LLLLLL_03

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决/lib64/libc.so.6: version `GLIBC_2.28‘ not found (required by相关的知识,希望对你有一定的参考价值。

解决方案:升级glibc到2.28版本

wget  https://mirror.bjtu.edu.cn/gnu/libc/glibc-2.28.tar.xz

tar -xf glibc-2.28.tar.xz -C /usr/local/

cd /usr/local/glibc-2.28/

mkdir build

cd build/

../configure --prefix=/usr/local/glibc-2.28

运行到…/configure --prefix=/usr/local/glibc-2.28时报错

报错1:

configure: error: in `/root/test/glibc-2.28/build’:
configure: error: no acceptable C compiler found in $PATH

yum install gcc -y

报错2:

These critical programs are missing or too old: make
Check the INSTALL file for required versions.
解决方案: make太过老旧,参照下文升级make

报错3:
These critical programs are missing or too old: compiler
Check the INSTALL file for required versions.
解决方案:gcc版本太旧,参照下文升级gcc

centos 升级GCC编译器
yum -y install centos-release-scl

yum -y install devtoolset-8-gcc devtoolset-8-gcc-c++ devtoolset-8-binutils

scl enable devtoolset-8 bash

###yum安装完,原来的gcc不覆盖,需要执行enable脚本更新环境变量 
source /opt/rh/devtoolset-8/enable

###想保持覆盖,可将其写入~/.bashrc或/etc/profile
echo "source /opt/rh/devtoolset-8/enable" >>/etc/profile

###查看gcc版本
gcc -v
升级make
wget http://ftp.gnu.org/gnu/make/make-4.2.tar.gz

tar -xzvf make-4.2.tar.gz

cd make-4.2

sudo ./configure

sudo make

sudo make install

sudo rm -rf /usr/bin/make

sudo cp ./make /usr/bin/

make -v
升级glibc-2.28
wget  https://mirror.bjtu.edu.cn/gnu/libc/glibc-2.28.tar.xz

tar -xf glibc-2.28.tar.xz -C /usr/local

cd /usr/local/glibc-2.28/

mkdir build

cd build/

yum install -y bison

sudo ../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin

make  //make 运行时间较长,可能会有半小时

###如make没有运行成功,解决error后需要先运行make clean,清除之前make的内容,才能再次执行make
make clean

make

make install

通过strings /lib64/libc.so.6 |grep GLIBC查询是否存在glibc-2.28版本

strings /lib64/libc.so.6 |grep GLIBC
ref:

centos /lib64/libc.so.6: version ‘GLIBC_2.28’ not found (required by

找不到/lib/libc.so.6

我正在交叉编译一个应用程序,但链接爆炸与它的错误

“找不到/lib/libc.so.6”。

它应该使用的libc.so.6是位于/home/work/worldcom/filesys/lib/libc.so.6的那个。这里有什么问题?

linking libobj.so
arm-none-linux-gnueabi-g++ obj1.o obj2.o obj2.o  -o libobj.so -L/home/work/worldcom/filesys/usr -Wl,-O1 -Wl,-z,defs -Wl,--enable-new-dtags -Wl,--sort-common -Wl,--as-needed -Wl,--hash-style=both -L/home/work/worldcom/filesys -L/home/work/worldcom/filesys/lib -L/home/work/worldcom/filesys/usr/lib -lcurl -shared
/home/lishevita/armv5tel/arm-2009q3/bin/../lib/gcc/arm-none-linux-gnueabi/4.4.1/../../../../arm-none-linux-gnueabi/bin/ld: skipping incompatible /lib/libc.so.6 when searching for /lib/libc.so.6
/home/lishevita/armv5tel/arm-2009q3/bin/../lib/gcc/arm-none-linux-gnueabi/4.4.1/../../../../arm-none-linux-gnueabi/bin/ld: cannot find /lib/libc.so.6
collect2: ld returned 1 exit status<br />
make: *** [libobj.so] Error 1<br />

我的makefile是手写的(即不是由Autotools生成的)。为了避免“你的Makefile被破坏”,这里有一些makefile中可能有助于澄清的细节。

CROSS_COMPILE = arm-none-linux-gnueabi-  
SYSROOT = /home/work/worldcom/filesys/  
DESTDIR = /home/work/worldcom/filesys/  

RELEASE_CXXFLAGS = -Os  
DEBUG_CXXFLAGS = -O0 -gstabs  
PKGCONFIG=`env ROOT=/home/work/worldcom/filesys cross-pkg-config glib-2.0 libcurl --cflags`  

CC = $(CROSS_COMPILE)gcc  
CXX = $(CROSS_COMPILE)g++  
LD = $(CROSS_COMPILE)ld  
AR = $(CROSS_COMPILE)ar  

LDFLAGS = -Wl,-O1 -Wl,-z,defs -Wl,--enable-new-dtags -Wl,--sort-common -Wl,--as-needed -Wl,--hash-style=both -L$(SYSROOT) -L$(SYSROOT)lib -L$(SYSROOT)usr -L$(SYSROOT)usr/lib -lcurl  

libobj.so: $(LIBOBJ_OBJS)  
        @echo linking $@  
        $(CXX) $^ -o $@ $(LDFLAGS) -shared $(PKG_LIBS) 

当然,还有LIBOBJ_OBJS的定义和目标,但这些与问题无关。

答案

你没有说明你正在使用什么gcc版本,但是如果它是最近的版本(4.0.0及以上我认为)你应该尝试使用-sysroot标志来g ++ / ld。将其指向Makefile中定义的$ SYSROOT。

假设最近有足够的gcc版本,它会起作用。

希望这有帮助,吉拉德

另一答案

我刚刚经历了同样的问题;添加--sysroot = / rootfs / prefix帮助我更接近真正的问题。我通过在目标中安装包libstdc ++ - dev来解决这个问题。

另一答案

你有没有考虑过可能的LIBPATH被设置和硬编码来寻找/lib/libc.so.6因此/lib路径?

在交叉编译时发出make之前,您是否尝试在命令行上设置这样的环境变量:

LIBPATH=/home/work/worldcom/filesys/lib

在您的特定情况下,正如您在标记“交叉编译”中所提到的,删除对/lib的任何引用以完全强制链接器查找您自己的主目录而不是干扰交叉 - 可能是值得的。编译过程。

另一种可能性是gcc编译器在为您的环境构建时,从源代码构建编译器期间的配置被指定为指向/lib路径。

希望这会有所帮助,最好的问候,汤姆。

另一答案

似乎makefile被破坏了,因为假设libc.so.6位于/ lib /文件夹中(注意前面的斜杠表示绝对路径!)。这似乎是个问题。

以上是关于解决/lib64/libc.so.6: version `GLIBC_2.28‘ not found (required by的主要内容,如果未能解决你的问题,请参考以下文章

Linux 误删libc.so.6

/lib64/libc.so.6: version `GLIBC_2.14‘ not found

误删除libc.so.6补救办法

解决/lib64/libc.so.6: version `GLIBC_2.28‘ not found (required by

误删除/lib64/libc.so.6

解决 /lib64/libc.so.6: version `GLIBC_2.14' not found 的问题