CentOS   发布时间:2022-04-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了使用ltp编译出来的cws_cmdline,cp到其他机器上执行报错:/lib64/libc.so.6: version `GLIBC_2.14′ not found大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

这主要是由于编译环境的glibc的版本高于运行时的glibc版本导致。 解决办法:升级glibc 具体参考: http://qinghua.blog.51cto.com/202629/1706585 为防止链接失效,黏贴如下: 在系统CentOS release 6.4 (Final)  x86_64上操作 1.试图运行程序 提示”libc.so.6: version `GLIBC_2.14′ n

这主要是由于编译环境的glibc的版本高于运行时的glibc版本导致。

解决办法:升级glibc

具体参考:

http://qinghua.blog.51cto.com/202629/1706585

为防止链接失效,黏贴如下:

在系统CentOS release 6.4 (Final) x86_64上操作

1.试图运行程序

提示”libc.so.6: version `GLIBC_2.14′ not found”,原因是系统的glibc版本太低,软件编译时使用了较高版本的glibc引起的.

2.查看系统glibc支持的版本

strings /lib64/libc.so.6 |grep GLIBC_

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

[root@localhost work]# strings /lib64/libc.so.6 |grep GLIBC_

GLIBC_2.2.5

GLIBC_2.2.6

GLIBC_2.3

GLIBC_2.3.2

GLIBC_2.3.3

GLIBC_2.3.4

GLIBC_2.4

GLIBC_2.5

GLIBC_2.6

GLIBC_2.7

GLIBC_2.8

GLIBC_2.9

GLIBC_2.10

GLIBC_2.11

GLIBC_2.12

GLIBC_PRIVATE

rpm -qa |grep glibc

1

2

3

4

5

6

7

8

# rpm -qa |grep glibc

compat-glibc-headers-2.5-46.2.x86_64

glibc-common-2.12-1.107.el6.x86_64

glibc-devel-2.12-1.107.el6.x86_64

glibc-2.12-1.107.el6.i686

compat-glibc-2.5-46.2.x86_64

glibc-2.12-1.107.el6.x86_64

glibc-headers-2.12-1.107.el6.x86_64

3.可以看到最高只支持2.12版本,所以考虑编译解决这个问题

1). 到官网http://www.gnu.org/software/libc/ 或FTPhttp://ftp.gnu.org/gnu/glibc/推荐下载最新版本,这里下载了glibc-2.14.tar.xz版本,解压到任意目录准备编译

2).这里解压到/opt/glibc-2.14

3).新建目录/opt/glibc-2.14-install,并cd进入此目录:

mkdir /opt/glibc-2.14-install

cd/opt/glibc-2.14-install

4). 新建安装目录/opt/glibc-2.14-build

mkdir/opt/glibc-2.14-build

并运行configure配置,make && sudo make install

cd/opt/glibc-2.14-install目录下,执行

/opt/glibc-2.14/configure –prefix=/opt/glibc-2.14-build/

make -j4

make install

4. 临时修改环境变量

exportLD_LIBRARY_PATH=/opt/glibc-2.14-build/lib:$LD_LIBRARY_PATH

注意: @H_301_286@glibc-2.14-build@H_301_286@是安装目录

———————–

version `GLIBC_2.14′ not found 解决方法

@H_419_306@一般出现类似次问题是当前运行系统Glibc版本低于编译环境Glibc版本造成Glibc版本兼容性造成的.
通常可以使用-static链接成静态程序即可解决.
不过经过google大神发现还有另外一种方法可以在使用动态库的环境下规避此类问题.

首先查看APP Glibc 兼容性.看当前app使用了哪些Glibc版本.

objdump -p libalgrms.so

1

2

3

4

5

6

7

8

9

10

11

[root@localhost lib]# objdump -p libalgrms.so

libalgrms.so:fileformatelf64-x86-64

.....

Version References:

required from libc.so.6:

0x06969194 0x00 04 GLIBC_2.14

0x0d696914 0x00 03 GLIBC_2.4

0x09691a75 0x00 02 GLIBC_2.2.5



@H_419_306@然后查看当前app引用了GLIBC_2.14中哪些函数

nm libalgrms.so | grep GLIBC_2.14

1

2

# nm libalgrms.so | grep GLIBC_2.14

U memcpy@@GLIBC_2.14


@H_419_306@也可以使用 objdump 查看app动态引用符号表.

objdump -T libalgrms.so | grep GLIBC_2.14

[root@localhost lib]# objdump -T libalgrms.so | grep GLIBC_2.14
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.14 memcpy


@H_419_306@上例显示app引用 2.14 版本中的memcpy函数.
下面将用到 gcc 的一个特性实际上是ld的特性.可以将引用符号绑定到一个特定版本.只需在.c文件中写入类似代码.
__asm__(“.symver original_foo,foo@VERS_1.1″);
即可.




查找当前系统glibc版本中memcpy的各个版本.

@H_419_306@获取libc.so实际路径.

1

2

3

4

5

6

7

8

9

10

11

12

# gcc --print-file-name=libc.so

/usr/lib/gcc/x86_64-unkNown-linux-gnu/4.7.1/../../../../lib64/libc.so

# file /usr/lib/gcc/x86_64-unkNown-linux-gnu/4.7.1/../../../../lib64/libc.so

.so: ASCII text

-bash-4.1# cat /usr/lib/gcc/x86_64-unkNown-linux-gnu/4.7.1/../../../../lib64/libc.so

/* GNU ld script

Use the shared library,but some functions are onlyin

the static library,so try that secondarily. */

OUTPUT_FORMAT(elf64-x86-64)

GROUP (.so.6/usr/lib64/libc_nonshared.a AS_NEEDED (/lib64/ld-linux-x86-64.so.2 ) )

# file /lib64/libc.so.6

.so.6: symbolic link to `libc-2.16.so'



@H_419_306@获取memcpy版本信息.

1

2

3

4

5

# nm /lib64/libc-2.16.so |grep memcpy

...

000000000008a6d0 i memcpy@@GLIBC_2.14

0000000000084ab0 i memcpy@GLIBC_2.2.5

...

@H_419_306@可以看出memcpy最低版本是(“@GLIBC_2.2.5″)2.2.5,而认使用版本是2.14(“@@GLIBC_2.14″) 这里我们只要将 glibc 2.14 版本memcpy降到glibc 2.2.5. 在源代码写入以下代码
__asm__(“.symver memcpy,memcpy@GLIBC_2.2.5″);
重新编译.

再次查看app信息.

1

2

3

4

5

6

7

8

9

#objdump -p app

0x0d696913 0x00 04 GLIBC_2.3

0x09691a75 0x00 02 GLIBC_2.2.5

@H_419_306@发现当前版本需求已不再需要glibc 2.14支持.

1

2

# objdump -T app |grep memcpy

0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 memcpy

@H_419_306@memcpy已完全修改为Glibc 2.2.5支持.

至此完美解决. 再次运行一切完美

大佬总结

以上是大佬教程为你收集整理的使用ltp编译出来的cws_cmdline,cp到其他机器上执行报错:/lib64/libc.so.6: version `GLIBC_2.14′ not found全部内容,希望文章能够帮你解决使用ltp编译出来的cws_cmdline,cp到其他机器上执行报错:/lib64/libc.so.6: version `GLIBC_2.14′ not found所遇到的程序开发问题。

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

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