源码升级安装glibc和rpm升级glibc


http://jacklin9.spaces.live.com/blog/cns!A891B52E1182AFB2!346.entry


http://blog.sina.com.cn/s/blog_48eef8410100ap22.html




下载glibc

wget  http://ftp.gnu.org/gnu/glibc/glibc-2.7.tar.gz


下载glibc-linuxthreads

wget http://ftp.gnu.org/gnu/glibc/glibc-linuxthreads-2.5.tar.gz


 


解压

tar -zxvf glibc-2.7.tar.gz

mkdir glibc-build

cd glibc-2.7

tar -zxvf ../glibc-linuxthreads-2.7.tar.gz

cd ..

export CFLAGS="-g -O2 -march=i486"

cd glibc-build

../glibc-2.7/configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin --disable-sanity-checks


#make

#make install


 


安装编译过程中需要注意三点:

1、要将glibc-linuxthreads解压到glibc目录下。

2、不能在glibc当前目录下运行configure。

3、加上优化开关,export CFLAGS="-g -O2 -march=i486",否则会出现错误

'#error "glibc cannot be compiled without optimization"'


 

###################################################################################################################################################

#########################    rpm 升级glibc2.7    ###########################################################################################

###################################################################################################################################################



因公司合作研发的游戏项目 德州扑克 要求,


Linux需要升级 glibc库要2.7以上,所以就尝试了下升级glibc。


由于找不到CentOS5的 glibc2.7 ,就在网上找到了fedora的rpm包来替代,试过暂时是没发现什么问题。以下是步骤。


这里下载相应的rpm包http://archive.fedoraproject.org/pub/archive/fedora/linux/releases/8/Everything/x86_64/os/Packages/


由于我们目前linux都是64位系统,所以我下载4个x64文件:

glibc-common-2.7-2.x86_64.rpm

glibc-headers-2.7-2.x86_64.rpm

glibc-devel-2.7-2.x86_64.rpm

glibc-2.7-2.x86_64.rpm       


然后升级的命令为:

rpm -Uvh --aid --nodeps glibc-common-2.7-2.x86_64.rpm

rpm -Uvh --aid --nodeps glibc-headers-2.7-2.x86_64.rpm

rpm -Uvh --aid --nodeps glibc-devel-2.7-2.x86_64.rpm

rpm -Uvh --aid --nodeps glibc-2.7-2.x86_64.rpm


直接强制更新升级。


升级后好像glibc2.7自动生效了。


编译一个程序测试下是否使用了64位的动态库。


#vi hello.c


#include

int main(void)

{

              printf("Hello World!\n");

}


保存退出,然后执行

gcc -o test hello.c

chmod +x test

./test


运行成功!


执行

file test

查看有看到x64,表示使用 64位的动态库。






网上有些地方加优化开关 -O2  时(大写字母O),写的是 -02 (数字零),所以拷贝过来仍然出现3中的错误,所以请注意。


安装完后,可以查看ls -l /lib/libc.so.6已升级


lrwxrwxrwx 1 root root 11 Nov 12 09:24 /lib/libc.so.6 -> libc-2.7.so




测试:

32位:

vim hello.c

 #include


 main()

 {

     printf("hello world!\n");

 }


保存退出,然后执行

gcc -o test hello.c

chmod +x test

./test


运行成功!


执行

file test


64位:

#vi hello.c


#include

int main(void)

{

              printf("Hello World!\n");

}


保存退出,然后执行

gcc -o test hello.c

chmod +x test

./test


运行成功!


执行

file test

查看有看到x64,表示使用 64位的动态库。