`
OpenNaive
  • 浏览: 14760 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

笔记:使用源码升级至glibc-2.7

阅读更多

用的redhat版本太老,而安装mentohust,需要glibc-2.7版本以上,所以从GNU的官网 上下载了glibc-2.7的源码,将原有的glibc-2.5升级到2.7。必须注意的是,几乎所有的应用程序都依赖于glibc的动态库,重新编译安装glibc必须非常谨慎,一旦出错可能导致系统无法继续使用。所以强烈建议阅读源码目录下的INSTALL和FAQ文档。

1 ../glibc-2.7/configure

第一步是配置glibc,出于安全的考虑,glibc不允许在源码目录树下编译,必须新建一个目录,然后在新建目录下运行configure,我就在源码目录的父目录下建了一个glibc-build目录,这样一旦出错就将整个目录移除即可。

 

congfiure最常用的选项是--prefix,--prefix指定了glibc安装的位置,默认是安装到/usr/lcoal,glibc会强烈建议不要安装到这个目录下,通常的做法是--prefix=/usr,这会将glibc安装为linux系统的标准库。

*** On GNU/Linux systems the GNU C Library should not be installed into
*** /usr/local since this might make your system totally unusable.
*** We strongly advise to use a different prefix.  For details read the FAQ.
*** If you really mean to do this, run configure again using the extra
*** parameter `--disable-sanity-checks'.

 

2 make

第二步是编译glibc,make会打印很多信息,而那些包含“***”的信息意味着非常严重的错误。glibc的编译相当耗时,可以给make加上-j选项并行编译glibc。我在make的时候遇到了以下问题。

make 写道
/root/source/glibc-build/libc_pic.os: In function `__libc_fork':
/root/source/glibc-2.7/posix/../nptl/sysdeps/unix/sysv/linux/i386/../fork.c:76: undefined reference to `__sync_bool_compare_and_swap_4'
/root/source/glibc-build/libc_pic.os: In function `__nscd_drop_map_ref':
/root/source/glibc-2.7/nscd/nscd-client.h:320: undefined reference to `__sync_fetch_and_add_4'
/root/source/glibc-build/libc_pic.os: In function `nscd_getpw_r':
/root/source/glibc-2.7/nscd/nscd_getpw_r.c:232: undefined reference to `__sync_fetch_and_add_4'
/root/source/glibc-build/libc_pic.os: In function `__nscd_drop_map_ref':
/root/source/glibc-2.7/nscd/nscd-client.h:320: undefined reference to `__sync_fetch_and_add_4'
/root/source/glibc-build/libc_pic.os: In function `nscd_getgr_r':
/root/source/glibc-2.7/nscd/nscd_getgr_r.c:321: undefined reference to `__sync_fetch_and_add_4'
/root/source/glibc-build/libc_pic.os: In function `__nscd_drop_map_ref':
/root/source/glibc-2.7/nscd/nscd-client.h:320: undefined reference to `__sync_fetch_and_add_4'
/root/source/glibc-build/libc_pic.os:/root/source/glibc-2.7/nscd/nscd_gethst_r.c:400: more undefined references to `__sync_fetch_and_add_4' follow
/root/source/glibc-build/libc_pic.os: In function `__nscd_get_map_ref':
/root/source/glibc-2.7/nscd/nscd_helper.c:404: undefined reference to `__sync_val_compare_and_swap_4'
/root/source/glibc-build/libc_pic.os: In function `*__GI___libc_freeres':
/root/source/glibc-2.7/malloc/set-freeres.c:39: undefined reference to `__sync_bool_compare_and_swap_4'
collect2: ld returned 1 exit status
make[1]: *** [/root/source/glibc-build/libc.so] Error 1
make[1]: Leaving directory `/root/source/glibc-2.7'
make: *** [all] Error 2
 

碰到这个问题需要为为CFLAGS添加march选项。

echo "CFLAGS += -march=i486" > configparms

执行make命令时会将configparms里的内容按照MakeFile的规则进行解析。

3 make check

在安装之前,先用make check检查是否存在错误,一定不要使用存在错误的库。这个check的过程实在太长,出现错误非常郁闷。我在check的时候遇到的问题是:

Timed out: the child process got signal Unknown signal 88

这个问题一直不知如何解决,多运行几次check之后错误又不见了。

4 make install

如果和我一样是从glibc-2.5升级到2.7,需要新建一个/usr/include目录,其中只能包含linux的头文件。

……install遇到各种问题,最后机器直接不能使用,神啊!

glibc太旧,不如换个新操作系统吧,亲!

 

 

分享到:
评论

相关推荐

    glibc-2.7.tar.gz及升级说明.zip

    6. **安装glibc**:如果测试没有问题,你可以使用`make install`来安装glibc到指定的位置(在这个例子中是`/usr/local/glibc-2.7`): ``` sudo make install ``` 7. **更新链接器**:由于glibc是系统核心的一...

    glibc-2.7-2.i386.rpm和glibc-common-2.7-2.i386 .rpm和glibc-2.7-2.x86_64.rpm

    在本话题中,我们关注的是三个特定版本的Glibc RPM包:glibc-2.7-2.i386.rpm、glibc-common-2.7-2.i386.rpm以及glibc-2.7-2.x86_64.rpm。 1. **glibc-2.7-2.i386.rpm**:这个RPM包是针对32位(i386)架构的Glibc ...

    glibc-2.7.tar.gz

    在压缩包文件名称列表中,只有“glibc-2.7”,这可能是指包含了glibc 2.7源代码的完整包。解压后,用户可以查看源代码、构建和定制glibc以适应特定的需求,或者用于研究和学习glibc的内部机制。 总结来说,glibc ...

    glibc-2.7-2.x86_64.rpm

    glibc-2.7-2.x86_64.rpm

    glibc-common-2.7-2.i386 .rpm

    glibc-common-2.7-2.i386 .rpm

    glibc-headers-2.7-2.i386.rpm

    glibc-headers-2.7-2.i386.rpm

    glibc-2.17-307.el7.1.i686_libc文件_依赖glibc安装_源码

    标题中的“glibc-2.17-307.el7.1.i686_libc文件_依赖glibc安装_源码”指的是Linux系统中一个重要的动态链接库——GNU C Library(通常简称为glibc)的一个特定版本。glibc是Linux操作系统下最基础、最核心的库,为...

    glibc-libidn-2.7.tar.gz

    1. 解压:使用`tar -zxvf glibc-libidn-2.7.tar.gz`命令解压缩文件。 2. 预处理:运行`./configure`以配置构建环境,检查系统兼容性并生成Makefile。 3. 编译:执行`make`命令,这将编译源代码。 4. 安装:使用`sudo...

    glibc-devel-2.7-2.i386.rpm

    glibc-devel-2.7-2.i386.rpm

    C 库函数 glibc-2.7

    《C库函数glibc-2.7:深入解析与应用》 C语言是计算机编程的基础,而GNU C Library(简称glibc)则是Linux系统中最重要的C语言标准库,它为C程序员提供了丰富的函数接口,极大地扩展了C语言的功能。本文将深入探讨...

    glibc-common-2.17-307.el7.1.x86_64_oracle_glibc_依赖glibc安装_

    在安装Oracle之前,通常需要先检查当前系统的glibc版本,如果不符合要求,就需要使用像"glibc-common-2.17-307.el7.1.x86_64.rpm"这样的RPM包来升级或安装兼容的glibc版本。在安装过程中,可以通过命令行工具如`rpm`...

    glibc-2.11.1.tar.gz

    glibc-2.11下载 ...3.2 在该目录下编译需要指定一个build目录 /usr/libc/glibc-2.7/.configure --prefix /usr/libc/glibc-2.7-build//usr/libc/glibc-2.7-build/ ————————————————

    glibc-2.7-2.i386.rpm

    Linux 或centos安装oracle必备安装包

    glibc-2.29源码包

    glibc-2.29源码包 glibc-2.29源码包 glibc-2.29源码包

    glibc-2.40.tar.gz

    glibc-2.40源码 glibc-2.40源码 glibc-2.40源码 glibc-2.40源码 glibc-2.40源码 glibc-2.40源码 glibc-2.40源码 glibc-2.40源码 glibc-2.40源码 glibc-2.40源码 glibc-2.40源码 glibc-2.40源码 glibc-2.40源码 glibc...

    glibc-ports-2.7.tar.gz

    glibc-ports-2.7则是glibc的一个特定版本,它包含了对不同平台和架构的支持,使得glibc可以在多种环境中运行。 glibc的核心功能主要包括以下几个方面: 1. **系统调用接口**:glibc作为操作系统与应用程序之间的...

    glibc-common-2.12-1.132.el6_5.4.i686.rpm

    glibc-common-2.12-1.132.el6_5.4.i686.rpm

    glibc-common-2.17-317.el7.x86_64.rpm

    glibc-common-2.17-317

    glibc-2.14离线安装包及安装命令

    3. **解压安装包**:使用`tar`命令解压缩文件,例如:`tar -zxvf glibc-2.14.tar.gz`,这会生成一个名为`glibc-2.14`的目录。 4. **配置和编译**:进入解压后的目录,运行`./configure --prefix=/usr`来配置GLIBC,...

Global site tag (gtag.js) - Google Analytics