前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux From Scratch(LFS11.0)编译交叉工具链 - Glibc-2.34

Linux From Scratch(LFS11.0)编译交叉工具链 - Glibc-2.34

作者头像
Lucifer三思而后行
发布2021-10-08 15:05:24
1.8K0
发布2021-10-08 15:05:24
举报
文章被收录于专栏:公众号:Lucifer三思而后行

Glibc 软件包包含主要的 C 语言库。它提供用于分配内存、检索目录、打开和关闭文件、读写文件、字符串处理、模式匹配、算术等用途的基本子程序。

安装 Glibc

解压软件包:

代码语言:javascript
复制
cd $LFS/sources
tar xf glibc-2.34.tar.xz
cd glibc-2.34

首先,创建一个 LSB 兼容性符号链接。另外,对于 x86_64,创建一个动态链接器正常工作所必须的符号链接:

代码语言:javascript
复制
case $(uname -m) in
    i?86)   ln -sfv ld-linux.so.2 $LFS/lib/ld-lsb.so.3
    ;;
    x86_64) ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64
            ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64/ld-lsb-x86-64.so.3
    ;;
esac

一些 Glibc 程序使用与 FHS 不兼容的 /var/db 目录存放它们的运行时数据。

下面应用一个补丁,使得这些程序在 FHS 兼容的位置存放运行时数据:

代码语言:javascript
复制
patch -Np1 -i ../glibc-2.34-fhs-1.patch

Glibc 手册建议在源文件夹之外的一个专用文件夹中编译 Glibc:

代码语言:javascript
复制
mkdir -v build
cd build

确保将 ldconfig 和 sln 工具安装到 /usr/sbin 目录中:

代码语言:javascript
复制
echo "rootsbindir=/usr/sbin" > configparms

下面,准备编译 Glibc:

代码语言:javascript
复制
time { ../configure                             \
      --prefix=/usr                      \
      --host=$LFS_TGT                    \
      --build=$(../scripts/config.guess) \
      --enable-kernel=3.2             \
      --with-headers=$LFS/usr/include    \
      libc_cv_slibdir=/usr/lib && make && make DESTDIR=$LFS install;}

改正 ldd 脚本中硬编码的可执行文件加载器路径:

代码语言:javascript
复制
sed '/RTLDLIST=/s@/usr@@g' -i $LFS/usr/bin/ldd

现在我们不可避免地要停下确认新工具链的各基本功能 (编译和链接) 能如我们所预期的那样工作。执行以下命令进行完整性检查:

代码语言:javascript
复制
echo 'int main(){}' > dummy.c
$LFS_TGT-gcc dummy.c
readelf -l a.out | grep '/ld-linux'

如果一切正常,那么应该没有错误消息,而且最后一行命令应该输出下列格式的内容:[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]

如果输出不像上面描述的那样,或者根本没有输出,就说明出了问题。检查并重新跟踪各个步骤,找到出问题的地方并修正它。在继续构建之前,必须解决这个问题。

现在我们的交叉工具链已经构建完成,可以完成 limits.h 头文件的安装。为此,运行 GCC 开发者提供的一个工具:

代码语言:javascript
复制
$LFS/tools/libexec/gcc/$LFS_TGT/11.2.0/install-tools/mkheaders

安装完成后清理工作:

代码语言:javascript
复制
rm -v dummy.c a.out
cd ../..
rm -rf glibc-2.34

本次分享到此结束啦~

如果觉得文章对你有帮助,点赞、收藏、关注、评论,一键四连支持,你的支持就是我创作最大的动力。

❤️ 技术交流可以 关注公众号:Lucifer三思而后行 ❤️

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/10/06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装 Glibc
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档