hbm

导航

 

0.以下在系统CentOS 6.3 x86_64上操作

1.试图运行程序,提示"libc.so.6: version `GLIBC_2.14' not found",原因是系统的glibc版本太低,软件编译时使用了较高版本的glibc引起的:

[cpp] view plaincopy
 
 
  1. [ghui@StuOS bin]$ pwd  
  2. /var/VMdisks/cross/mingw32/bin  
  3. [ghui@StuOS bin]$ ls  
  4. lrelease     QtCore4.dll         QtNetwork4.dll      QtSql4.dll     QtXml4.dll  
  5. moc          QtDeclarative4.dll  QtOpenGL4.dll       QtSvg4.dll     rcc  
  6. phonon4.dll  QtGui4.dll          QtScript4.dll       QtTest4.dll    uic  
  7. qmake        QtMultimedia4.dll   QtScriptTools4.dll  QtWebKit4.dll  
  8. [ghui@StuOS bin]$ ./qmake   
  9. ./qmake: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by ./qmake)  

 

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

[cpp] view plaincopy
 
 
  1. [ghui@StuOS bin]$ strings /lib64/libc.so.6 |grep GLIBC_  
  2. GLIBC_2.2.5  
  3. GLIBC_2.2.6  
  4. GLIBC_2.3  
  5. GLIBC_2.3.2  
  6. GLIBC_2.3.3  
  7. GLIBC_2.3.4  
  8. GLIBC_2.4  
  9. GLIBC_2.5  
  10. GLIBC_2.6  
  11. GLIBC_2.7  
  12. GLIBC_2.8  
  13. GLIBC_2.9  
  14. GLIBC_2.10  
  15. GLIBC_2.11  
  16. GLIBC_2.12  
  17. GLIBC_PRIVATE  
[cpp] view plaincopy
 
 
  1. [ghui@StuOS bin]$ rpm -qa |grep glibc  
  2. glibc-static-2.12-1.80.el6_3.6.x86_64  
  3. glibc-headers-2.12-1.80.el6_3.6.x86_64  
  4. glibc-common-2.12-1.80.el6_3.6.x86_64  
  5. glibc-devel-2.12-1.80.el6_3.6.x86_64  
  6. glibc-static-2.12-1.80.el6_3.6.i686  
  7. glibc-devel-2.12-1.80.el6_3.6.i686  
  8. glibc-2.12-1.80.el6_3.6.i686  
  9. glibc-2.12-1.80.el6_3.6.x86_64  

 

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

       a. 到http://www.gnu.org/software/libc/下载最新版本,我这里下载了glibc-2.14.tar.xz 这个版本,解压到任意目录准备编译

       b.这里解压到/var/VMdisks/glibc-2.14/

[cpp] view plaincopy
 
 
  1. [ghui@StuOS bin]$ cd /var/VMdisks/glibc-2.14/  
  2. [ghui@StuOS glibc-2.14]$ pwd  
  3. /var/VMdisks/glibc-2.14  
  4. [ghui@StuOS glibc-2.14]$ ls  
  5. abilist            config.h.in           intl           README.libm  
  6. abi-tags           config.log            io             resolv  
  7. aclocal.m4         config.make.in        libc-abis      resource  
  8. aout               configure             libidn         rt  
  9. argp               configure.in          libio          Rules  
  10. assert             conform               LICENSES       scripts  
  11. autom4te.cache     CONFORMANCE           locale         setjmp  
  12. bits               COPYING               localedata     shadow  
  13. BUGS               COPYING.LIB           login          shlib-versions  
  14. build              cppflags-iterator.mk  mach           signal  
  15. CANCEL-FCT-WAIVE   crypt                 Makeconfig     socket  
  16. CANCEL-FILE-WAIVE  csu                   Makefile       soft-fp  
  17. catgets            ctype                 Makefile.in    stdio-common  
  18. ChangeLog          debug                 Makerules      stdlib  
  19. ChangeLog.1        dirent                malloc         streams  
  20. ChangeLog.10       dlfcn                 manual         string  
  21. ChangeLog.11       elf                   math           sunrpc  
  22. ChangeLog.12       extra-lib.mk          misc           sysdeps  
  23. ChangeLog.13       extra-modules.mk      NAMESPACE      sysvipc  
  24. ChangeLog.14       FAQ                   NEWS           termios  
  25. ChangeLog.15       FAQ.in                nis            test-skeleton.c  
  26. ChangeLog.16       gmon                  NOTES          time  
  27. ChangeLog.17       gnulib                nptl           timezone  
  28. ChangeLog.2        grp                   nptl_db        tls.make.c  
  29. ChangeLog.3        gshadow               nscd           version.h  
  30. ChangeLog.4        hesiod                nss            Versions.def  
  31. ChangeLog.5        hurd                  o-iterator.mk  wcsmbs  
  32. ChangeLog.6        iconv                 po             wctype  
  33. ChangeLog.7        iconvdata             posix          WUR-REPORT  
  34. ChangeLog.8        include               PROJECTS  
  35. ChangeLog.9        inet                  pwd  
  36. conf               INSTALL               README  


      c.在glibc源码目录建立构建目录,并cd进入构建目录

[cpp] view plaincopy
 
 
  1. [ghui@StuOS glibc-2.14]$ mkdir build  
[cpp] view plaincopy
 
 
  1. [ghui@StuOS glibc-2.14]$ cd build  


    d.运行configure配置,make && sudo  make install

[cpp] view plaincopy
 
 
  1. [ghui@StuOS build]$ ../configure --prefix=/opt/glibc-2.14  
  2. [ghui@StuOS build]$ make -j4   
  3. [ghui@StuOS build]$ sudo make install  
  4. [sudo] password for ghui:   


4.临时修改环境变量

[cpp] view plaincopy
 
 
  1. [ghui@StuOS bin]$ export LD_LIBRARY_PATH=/opt/glibc-2.14/lib:$LD_LIBRARY_PATH  
[cpp] view plaincopy
 
 
  1. [ghui@StuOS glibc-2.14]$ cd /var/VMdisks/cross/mingw32/bin/  

 

[cpp] view plaincopy
 
 
  1. [ghui@StuOS bin]$ ./qmake   
  2. Usage: ./qmake [mode] [options] [files]  
  3.   
  4. QMake has two modes, one mode for generating project files based on  
  5. some heuristics, and the other for generating makefiles. Normally you  
  6. shouldn't need to specify a mode, as makefile generation is the default  
  7. mode for qmake, but you may use this to test qmake on an existing project  
  8. ...  

 

此时运行正常,问题解决。

由于其他软件需要更高级的glibc 所以升级如下:

首先用centos的yum升级glibc库

  • yum update glibc

但问题依旧。用命令查看glibc库的信息

  • rpm -qi glibc

显示系统的glibc库版本为2.5

在CentOS中用更新命令到2.5已经是最新版本了,只好手动下载 glibc 2.11的源码包编译安装更新:

地址:http://ftp.gnu.org/pub/gnu/glibc/glibc-2.11.tar.gz

 

  • cd /usr/src 

  • mkdir glibc-2.11-build 

  • wget http://ftp.gnu.org/pub/gnu/glibc/glibc-2.11.tar.gz 

  • tar zxvf glibc-2.11.tar.gz 

  • cd /usr/src/glibc-2.11-build/ 

  • export CFLAGS="-g -O2 -march=i686"

  • /usr/src/glibc-2.11/configure --prefix=/usr/src/glibc-2.11-build/ --with-headers=/usr/include

  • make 

  • make install

注意:

1.   在目录usr/src/glibc-2.11执行configure命令时不能执行,需在外部文件夹glibc-2.11-build 执行

2.   加上优化开关,export CFLAGS="-g -O2 -march=i686",否则会出现错误,此处的i686请参照自己的机器

3.    当有如下错误时:

checking whether ranlib is necessary... no
checking LD_LIBRARY_PATH variable... contains current directory
configure: error:
*** LD_LIBRARY_PATH shouldn't contain the current directory when
*** building glibc. Please change the environment variable
*** and run configure again.
解决办法:查看LD_LIBRARY_PATH  echo $LD_LIBRARY_PATH,我的打印的是/usr/lib/qt44/lib:

configure里说:LD_LIBRARY_PATH不能以终结符作为开始和最后一个字符,不能有2个终结符连在一起,所以修改下LD_LIBRARY_PATH即可,export LD_LIBRARY_PATH=/usr/lib/qt44/lib

4.   当有如下错误时:

configure: error: gcc must provide the  header

解决办法:get the cpuid.h file from official GCC respositories> (http://gcc.gnu.org/viewcvs/tags/gcc_4_4_2_release/gcc/config/i386/cpuid.h?view=co)> and put it into /usr/include(上面指定的--with-headers)

5.   当以上问题都解决时,make  make install吧,由于东西比较多,需要些时间,大概半小时左右。

 LD_LIBRARY_PATH shouldn't contain the current directory

I am trying to build a self-contain GLIBC 2.7. It shows following error when I runconfigure

checking whether ranlib is necessary... no
checking LD_LIBRARY_PATH variable... contains current directory
configure: error:
*** LD_LIBRARY_PATH shouldn't contain the current directory when
*** building glibc. Please change the environment variable
*** and run configure again.

my LD_LIBRARY_PATH is

$ echo $LD_LIBRARY_PATH
/home/sliu/opt/lib:/home/sliu/opt/libexec/gcc/x86_64-unknown-linux-gnu/4.8.1:/home/sliu/opt/lib64:/home/sliu/opt/lib64/gcj-4.8.1-14:

The error message complains that LD_LIBRARY_PATH contain the current directory. However my LD_LIBRARY_PATH doesn't contain any "current directory". Actually, it's caused by the path seperate character ":" instead of "current directory". If you search LD_LIBRARY_PATH in configure, you will find this comments

# Test if LD_LIBRARY_PATH contains the notation for the current directory
# since this would lead to problems installing/building glibc.
# LD_LIBRARY_PATH contains the current directory if one of the following
# is true:
# - one of the terminals (":" and ";") is the first or last sign
# - two terminals occur directly after each other
# - the path contains an element with a dot in it

Which means, The LD_LIBRARY_PATH can not start or end with character ":".

So this issue can be fixed by removing the last ':' character in LD_LIBRARY_PATH.

解决办法就是,去掉 LD_LIBRARY_PATH 最后的那个路径分隔符':'.

posted on 2014-12-03 13:59  hbm  阅读(1208)  评论(0编辑  收藏  举报