栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Glibc编译过程总结

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Glibc编译过程总结

Glibc编译过程

一、 下载代码
a) 下载代码
在http://ftp.gnu.org/gnu/glibc/下下载指定版本,先试试glibc-2.3版本

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

b) 解压文件

gzip –d glibc-2.3.tar.gz
tar –xvf glibc-2.3.tar

二、 配置

mkdir build_dir
mkdir target
cd build_dir
../glibc-2.3/configure --prefix=/media/xiaoshixiu/glibc/glibc_2_3/target/

a) 此时报错*** These critical programs are missing or too old: gcc make
因此先解决gcc版本问题
先查看glibc-2.3 /INSTALL文件

可以看到要求make版本为3.79以上,gcc版本为3.2版本以上,但是我本地gcc版本为5.4,比要求新但是还是无法编译,所以可能是我本地的版本太新了。
b) 降低gcc版本
用过多种方法,包括下载源码编译,都太复杂且会遇到其他问题。但是使用这个方法(https://www.cnblogs.com/Pan-xi-yi/p/12044608.html)可以成功降低gcc版本号

wget http://old-releases.ubuntu.com/ubuntu/pool/universe/g/gcc-3.4/gcc-3.4-base_3.4.6-6ubuntu3_amd64.deb
sudo dpkg --force-depends -i gcc-3.4-base_3.4.6-6ubuntu3_amd64.deb
wget http://old-releases.ubuntu.com/ubuntu/pool/universe/g/gcc-3.4/gcc-3.4_3.4.6-6ubuntu3_amd64.deb
sudo dpkg --force-depends -i gcc-3.4_3.4.6-6ubuntu3_amd64.deb 
wget http://old-releases.ubuntu.com/ubuntu/pool/universe/g/gcc-3.4/cpp-3.4_3.4.6-6ubuntu3_amd64.deb
sudo dpkg --force-depends -i cpp-3.4_3.4.6-6ubuntu3_amd64.deb 
wget http://old-releases.ubuntu.com/ubuntu/pool/universe/g/gcc-3.4/g++-3.4_3.4.6-6ubuntu3_amd64.deb
sudo dpkg --force-depends -i g++-3.4_3.4.6-6ubuntu3_amd64.deb
wget http://old-releases.ubuntu.com/ubuntu/pool/universe/g/gcc-3.4/libstdc++6-dev_3.4.6-6ubuntu3_amd64.deb
sudo dpkg --force-depends -i libstdc++6-dev_3.4.6-6ubuntu3_amd64.deb
wget http://old-releases.ubuntu.com/ubuntu/pool/universe/g/gcc-3.4/g77-3.4_3.4.6-6ubuntu3_amd64.deb
sudo dpkg --force-depends -i g77-3.4_3.4.6-6ubuntu3_amd64.deb
wget http://old-releases.ubuntu.com/ubuntu/pool/universe/g/gcc-3.4/libg2c0-dev_3.4.6-6ubuntu3_amd64.deb
sudo dpkg --force-depends -i libg2c0-dev_3.4.6-6ubuntu3_amd64.deb
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-3.4 30

继续使用上面的configure命令,输出如下

表示gcc版本没问题了。
c) 设置gcc配置
随便运行gcc发现找不到crt1.o

因此需要指定编译期间指定文件位置,通过find命令查找crt1.o位置

vim ~/.bashrc

结尾添加如下语句

export LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/:$LIBRARY_PATH

然后再次执行

提示找不到gcc_s
输入:ld –lgcc_s –verbose

表示在ld上述路径中寻找libgcc_s.so但是找不到
然后输入:locate libgcc_s.so

表示在上述路径中找到libgcc_s.so,但是libgcc_s.so也是链接,libgcc_s.so.1才是实际文件,所以需要我们自己创建一个软链接

sudo ln -s /lib/x86_64-linux-gnu/libgcc_s.so.1 /usr/lib/libgcc_s.so

然后输入: ld –lgcc_s –verbose

表示找到了libgcc_s.so库
然后编译测试文件

表示添加成功
d) 降低make版本
下载make-3.79版本

wget http://ftp.gnu.org/gnu/make/make-3.79.tar.gz
tar –zxvf make-3.79.tar.gz
cd make-3.79
./configure –prefix=/usr/locat/make_3_79
make
make install
export PATH=/usr/locat/make_3_79/bin:$PATH

e) 之后对glibc进行configure
提示:

glibc the available kernel headers are older

,可以忽略直接进行编译。
三、 编译
a) 编译失败
强行编译提示:

gcc must provide the

主要原因是glibc对kernel header有要求,具体可以参考https://www.cnblogs.com/dyllove98/archive/2013/07/20/3202824.html,我本地安装的ubuntu16.04版本如下:

头文件版本可以查看include/linux/version

可以看到头文件版本号和内核版本号相同4.15.0
查看Glibc-2.3/INSTALL

这里其实很难理解,明明说是只要内核头文件大于2.3.99就行,但是我本地就是编译不过,怀疑是内核版本太高的缘故,解决办法要么降低内核版本,要么升高glibc版本,由于我这边编译机版本不好修改,因此增加glibc版本号进行编译。
四、 换GLIBC-2.16版本编译
a) glibc .dyn leaves prerequisite pattern empty
configure成功后进行make编译,出现下面错误

参考https://stackoverflow.com/questions/22261970/error-during-compilation-of-gnu-c-library-glibc
意思是make版本太低了,于是下载3.82
下载make-3.82版本

wget http://ftp.gnu.org/gnu/make/make-3.82.tar.gz
tar –zxvf make-3. 82.tar.gz
cd make-3. 82
./configure –prefix=/usr/locat/make_3_82
make
make install
export PATH=/usr/locat/make_3_82/bin:$PATH

b) 重新编译

make
make install


五、 总结
要编译Glibc,就要注意编译机内核版本(内核头文件版本),GCC版本,make版本,ld版本。
Glibc-2.16可以顺利编译通过的编译环境如下:
操作系统:ubuntu16.04
内核版本:4.15.0
GCC版本:5.4.0
Make版本:3.82
LD版本:2.26.1

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/718814.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号