一、安装glibc-2.14
[root@jrgc130~]#wgethttp://ftp.gnu.org/gnu/glibc/glibc-2.14.tar.gz [root@jrgc130~]#mvglibc-2.14.tar.gz/opt/software [root@jrgc130~]#cd/opt/software [root@jrgc130software]#tarxfglibc-2.14.tar.gz [root@jrgc130software]#cdglibc-2.14 [root@jrgc130glibc-2.14]#mkdirbuild [root@jrgc130glibc-2.14]#cdbuild [root@jrgc130build]#../configure--prefix=/usr/local/glibc-2.14 [root@jrgc130build]#make-j4 [root@jrgc130build]#makeinstall
二、拷贝链接库
[root@jrgc130build]#cd/usr/local/glibc-2.14/lib [root@jrgc130lib]#cplibc-2.16.so/lib64/
三、创建链接
[root@jrgc130lib]#cd/lib64 [root@jrgc130lib64]#rm-rflibc.so.6
此后会报如下错误:
ls:errorwhileloadingsharedlibraries:libc.so.6:cannotopensharedobjectfile:Nosuchfileordirectory
解决方法:
[root@examplelib64]#/sbin/slnlibc-2.14.so/lib64/libc.so.6
四、查看支持的版本
[root@jrgc130lib64]#strings/lib64/libc.so.6|grepGLIBC 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_2.13 GLIBC_2.14 GLIBC_PRIVATE
通过ssh连接会报如下错误:
-bash:warning:setlocale:LC_CTYPE:cannotchangelocale(en_US.UTF-8):Nosuchfileordirectory -bash:warning:setlocale:LC_COLLATE:cannotchangelocale(en_US.UTF-8):Nosuchfileordirectory -bash:warning:setlocale:LC_MESSAGES:cannotchangelocale(en_US.UTF-8):Nosuchfileordirectory -bash:warning:setlocale:LC_NUMERIC:cannotchangelocale(en_US.UTF-8):Nosuchfileordirectory -bash:warning:setlocale:LC_TIME:cannotchangelocale(en_US.UTF-8):Nosuchfileordirectory
解决方法:
[root@example~]#vim/etc/environment LANG=en_US.utf-8 LC_ALL= [root@example~]#source/etc/environment [root@example~]#localedef-v-c-ien_US-fUTF-8en_US.UTF-8
五、补充
1.localedef用法 localedef[-c][-Ccompiler_options][-fcharmap] [-isourcefile][-Llinker_options][-mmodel] [-ucode_set_name][-Wcc,arg][-xextensions_file]localename localedef实用程序会将语言环境类别的源定义转换至函数和实用程序可用的格式,这些函数和实用程序的操作行为由语言环境变量的设置来确定; LC_CTYPE 定义字符分类和大小写转换。 LC_COLLATE 定义整理规则。 LC_MONETARY 定义在货币信息格式设置中使用的格式和符号。 LC_NUMERIC 为非货币数值编辑定义十进制分隔符、分组以及分组符号。 LC_TIME 定义日期和时间信息的格式和内容。 LC_MESSAGES 定义肯定性和否定性响应的格式和值。 �c 创建永久性输出,即使已经发出警告消息。 �isourcefile 包含源定义的文件的路径名。如果未出现此选项,则会从标准输入中读取源定义。 2./sbin/sln Linux系统有两类可执行程序。 (1).静态链接的可执行程序包含它们所需的所有库函数。所有库函数都链接到可执行程序中。它们是完整的程序,不依赖于外部的库。静态链接程序的优点是它们不要求事先安装任何东西就可以运行。 (2).动态链接的可执行程序要小得多,是不完整的,需要来自外部共享库的函数才能运行。除了更小之外,动态链接还允许包指定依赖的库,而不需要将库包含在包中。使用动态链接还允许许多运行的程序共享库的一个副本,这就避免了相同代码的许多副本占据内存。由于这些原因,当今的大多数程序采用动态链接。 在典型的Linux系统上,一个有意思的例子是ln(/bin/ln)命令,它在文件之间创建链接,包括硬链接和软(或符号)链接。共享库常常涉及库的通用名和库的特定级别之间的符号链接,所以如果链接不起作用了,那么可能是ln命令出故障了。为了防止这种情况,Linux系统包含ln程序的一个静态链接版本,即sln程序(/sbin/sln)。 [root@jrgc130~]#ll-lh/sbin/sln;ll-lh/bin/ln -rwxr-xr-x.1rootroot671KNov212013/sbin/sln -rwxr-xr-x.1rootroot49KNov222013/bin/ln 知道了静态链接的程序可能比较大之后,又如何判断程序是否是静态链接的呢?而且,如果程序是动态链接的,又如何知道它需要哪些库呢?这两个问题的答案都是使用ldd命令,这个命令显示可执行程序的库需求信息。 [root@jrgc130~]#ldd/sbin/sln/bin/ln /sbin/sln: notadynamicexecutable /bin/ln: linux-vdso.so.1=>(0x00007fffd7bb9000)#<--将内核态的调用映射到用户态的地址空间中,使得调用开销更小,路径更好. libc.so.6=>/lib64/libc.so.6(0x00007f3deb9c1000) /lib64/ld-linux-x86-64.so.2(0x0000003c50000000) 因为ldd实际上关注动态链接,所以通过显示“notadynamicexecutable”来表示sln是静态链接的;对于ln命令,它指出两个共享库的名称(libc.so.6和ld-linux.so.2)以及这些库的位置。注意:.so表示这些是共享对象或动态库。 使用ll命令显示这些实际上是库的特定版本的符号链接。 [root@jrgc130lib64]#ll/lib64/libc.so.6; lrwxrwxrwx1rootroot12Aug709:28/lib64/libc.so.6->libc-2.14.so 那么,动态装载程序如何知道去哪里寻找可执行程序呢?与Linux上的许多东西一样,在/etc中有配置文件。 /etc/ld.so.conf指定应该包含来自子目录ld.so.conf.d的所有 [root@jrgc130lib64]#cat/etc/ld.so.conf includeld.so.conf.d/*.conf 程序的装载需要快速,所以ld.so.conf被传递给ldconfig命令,以便处理来自ld.so.conf.d的所有库以及来自受信任目录(/lib和/usr/lib)的库。 动态装载程序使用ld.conf.cache文件定位要动态装载和链接的文件。如果修改了ld.so.conf(或者在ld.so.conf.d中添加了新的包含文件),那么必须运行ldconfig命令(作为根用户)来重新构建ld.conf.cache文件。 一般情况下,使用ldconfig命令(不带参数)来重新构建ld.so.cache。可以指定几个参数来覆盖默认行为。使用-p参数显示ld.so.cache的内容。 [root@jrgc130lib64]#/sbin/ldconfig-p|more 784libsfoundincache`/etc/ld.so.cache' libz.so.1(libc6,x86-64)=>/lib64/libz.so.1 libz.so(libc6,x86-64)=>/usr/lib64/libz.so libyajl.so.1(libc6,x86-64)=>/usr/lib64/libyajl.so.1 libxul.so(libc6,x86-64)=>/usr/lib64/xulrunner/libxul.so libxtables.so.4(libc6,x86-64)=>/lib64/libxtables.so.4 libxslt.so.1(libc6,x86-64)=>/usr/lib64/libxslt.so.1 ........ libBrokenLocale.so.1(libc6,x86-64,OSABI:Linux2.6.18)=>/lib64/libBrokenLocale.so.1 libBrokenLocale.so(libc6,OSABI:Linux2.6.18)=>/usr/lib64/libBrokenLocale.so ld-linux-x86-64.so.2(libc6,x86-64)=>/lib64/ld-linux-x86-64.so.2
六、参考
https://docs.oracle.com/cd/E62103_01/html/E62875/localedef-1.html
http://linux.chinaunix.net/techdoc/system/2009/02/08/1061470.shtml
http://adam8157.info/blog/2011/10/linux-vdso/
原文链接:https://www.f2er.com/centos/381109.html