Glibc编译过程总结 您所在的位置:网站首页 编译安装gcc要多久时间 Glibc编译过程总结

Glibc编译过程总结

2023-12-22 03:28| 来源: 网络整理| 查看: 265

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



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有