关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » HTML5 »重走LFS之路:(四) 工具链编译-1

    重走LFS之路:(四) 工具链编译-1

    2015-04-05 00:00:00 出处:linux.cn
    分享

    经过了充分的准备工作之后,大家要来着手工具链的编译。LFS不能直接使用宿主系统的编译器和库进行编译,而是用宿主系统的编译器和库再编译出来一份编译器和库,然后二次编译编译器和库,最后才能用最终的编译器来编译构建LFS系统。所以我们现在需要做的是来编译这些工具。

    重走LFS之路:(四) 工具链编译-1

    (题图来自: techradar.com)

    这些工具的编译比较冗长,所以可能需要数篇的篇幅来记录这些过程。

    首先需要创建一个目录来安置这些工具

    mkdir -v $LFS/tools

    然后为了方便,我们在根目录做了个软连接 /tools -> $LFS/tools

    sudo ln -sv $LFS/tools /tools

    重走LFS之路:(四) 工具链编译-1

    这时候有个坑,LFS 7.7官方文档上写的命令是ln -sv $LFS/tools /,但是事实上在Debian 7.7版本实测,酱紫可能会有问题,就像这样

    重走LFS之路:(四) 工具链编译-1

    接下来为了避免使用权限大的账号误操作造成宿主机损失,新建一个lfs账户,加入lfs组,并且将$LFS下的src和tools两个目录属主都改为lfs。

    sudo groupadd lfs
    sudo useradd -s /bin/bash -g lfs -m -k /dev/null lfs
    sudo passwd lfs
    sudo chown -v lfs $LFS/tools
    sudo chown -Rv lfs $LFS/src

    重走LFS之路:(四) 工具链编译-1

    这里还有一个坑,LFS 7.7官方文档上的原命令是chown -v lfs $LFS/src,可是我们已经下载完的文件都在那里面,会没权限操作的,所以需要加上R参数来递归修改文件属主。最后用su – lfs就可以切换到lfs账户来操作啦。

    切换到lfs账户之后,我们需要建立这个账户的环境变量

    vi ~/.bashrc

    我们来写一个环境变量文件

    HOME=$HOME
    TERM=$TERM
    PS1=’${debian_chroot:+($debian_chroot)}/[/033[01;31m/][/A]/[/033[01;33m/]/u/[/033[00m/]@/[/033[01;32m/]/h:/[/033[01;34m/]/w/[/033[00m/]$ ‘
    set +h
    umask 022
    LFS=/mnt/lfs
    LC_ALL=POSIX
    LFS_TGT=$(uname -m)-lfs-linux-gnu
    PATH=/tools/bin:/bin:/usr/bin
    export LFS LC_ALL LFS_TGT PATH

    重走LFS之路:(四) 工具链编译-1

    然后加载这个环境变量文件,并且查看一下是不是真的将环境变量都设置上了

    source ~/.bashrc
    export

    重走LFS之路:(四) 工具链编译-1

    事实证明我们的操作是有效的呃……

    此时是有一个编译选项的,我起的虚拟机是单核的就无所谓了。假如你用了多核机器来做LFS,那么可以通过-j2参数来加速make,或者设置这样一个环境变量

    export MAKEFLAGS=’-j 2′

    现在为了让目录简单一点,我们需要把源码包从$LFS/src/lfs里面挪到$LFS/src里面

    mv $LFS/src/lfs/* $LFS/src/

    接下来我们进行工具编译

    首先调整当前路径到$LFS/src

    cd $LFS/src

    解压binutils,开始进行binutils的第一遍编译

    tar jxvf binutils-2.25.tar.bz2

    进入binutils源码目录

    cd binutils-2.25

    我们为了保持源码目录的洁净和区分编译文件,会将每个软件新建一个构建目录来配置和编译,而非从源码目录直接编译,格式如{softname}-build

    从$LFS/src/binutils-2.25平级建立binutils构建目录并进入该目录

    mkdir -v ../binutils-build
    cd ../binutils-build/

    加入编译选项来配置binutils

    ../binutils-2.25/configure /
    –prefix=/tools /
    –with-sysroot=$LFS /
    –with-lib-path=/tools/lib /
    –target=$LFS_TGT /
    –disable-nls /
    –disable-werror

    编译好的binutils不着急直接安装,因为根据官方文档的提示,我们的机器架构是x86_64,此时需要建立个库目录,然后做个软连接

    case $(uname -m) in
        x86_64) mkdir -v /tools/lib && ln -sv lib /tools/lib64 ;;
    esac

    建立完成之后,就可以安装啦

    make install

    回到$LFS/src目录,继续来解压并第一遍编译GCC,不过GCC稍微复杂一点,因为它需要三个包的支持,GMP, MPFR和MPC。

    tar jxvf gcc-4.9.2.tar.bz2
    cd gcc-4.9.2
    tar -xf ../mpfr-3.1.2.tar.xz
    mv -v mpfr-3.1.2 mpfr
    tar -xf ../gmp-6.0.0a.tar.xz
    mv -v gmp-6.0.0 gmp
    tar -xf ../mpc-1.0.2.tar.gz
    mv -v mpc-1.0.2 mpc
    
    for file in /
    $(find gcc/config -name linux64.h -o -name linux.h -o -name sysv4.h)
    do
    cp -uv $file{,.orig}
    sed -e ‘s@/lib/(64/)/ /(32/)/ /ld@/tools&@g’ /
    -e ‘s@/usr@/tools@g’ $file.orig > $file
    echo ‘
    #undef STANDARD_STARTFILE_PREFIX_1
    #undef STANDARD_STARTFILE_PREFIX_2
    #define STANDARD_STARTFILE_PREFIX_1 “/tools/lib/”
    #define STANDARD_STARTFILE_PREFIX_2 “”‘ >> $file
    touch $file.orig
    done
    
    sed -i ‘/k prot/agcc_cv_libc_provides_ssp=yes’ gcc/configure

    准备完毕,下面依旧建立构建目录,并且开始配置和构建

    mkdir -v ../gcc-build
    cd ../gcc-build
    
    ../gcc-4.9.2/configure /
    –target=$LFS_TGT /
    –prefix=/tools /
    –with-sysroot=$LFS /
    –with-newlib /
    –without-headers /
    –with-local-prefix=/tools /
    –with-native-system-header-dir=/tools/include /
    –disable-nls /
    –disable-shared /
    –disable-multilib /
    –disable-decimal-float /
    –disable-threads /
    –disable-libatomic /
    –disable-libgomp /
    –disable-libitm /
    –disable-libquadmath /
    –disable-libsanitizer /
    –disable-libssp /
    –disable-libvtv /
    –disable-libcilkrts /
    –disable-libstdc++-v3 /
    –enable-languages=c,c++
    
    make
    make install

    除了三个支持包和前置的一些设置之外,gcc编译就没啥新鲜的了,编译安装就是了。

    接下来继续回到$LFS/src解压和编译安装Linux API Headers

    tar -xf linux-3.19.tar.xz
    cd linux-3.19
    make mrproper
    make INSTALL_HDR_PATH=dest headers_install
    cp -rv dest/include/* /tools/include

    Linux API Headers安装完成

    这里有意思的是mrproper,其实和make clean的功能差不多,但是比clean的范围要大。

    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    正版 Windows 11产品密钥怎么查找/查看?

    还有3个月,微软将停止 Windows 10 的更新

    Windows 10 终止支持后,企业为何要立即升级?

    Windows 10 将于 2025年10 月终止技术支持,建议迁移到 Windows 11

    Windows 12 发布推迟,微软正全力筹备Windows 11 25H2更新

    Linux 退出 mail的命令是什么

    Linux 提醒 No space left on device,但我的空间看起来还有不少空余呢

    hiberfil.sys文件可以删除吗?了解该文件并手把手教你删除C盘的hiberfil.sys文件

    Window 10和 Windows 11哪个好?答案是:看你自己的需求

    盗版软件成公司里的“隐形炸弹”?老板们的“法务噩梦” 有救了!

    IT头条

    液冷服务器概念股走强,博汇、润泽等液冷概念股票大涨

    01:17

    亚太地区的 AI 驱动型医疗保健:2025 年及以后的下一步是什么?

    16:30

    智能手机市场风云:iPhone领跑销量榜,华为缺席引争议

    15:43

    大数据算法和“老师傅”经验叠加 智慧化收储粮食尽显“科技范”

    15:17

    严重缩水!NVIDIA将推中国特供RTX 5090 DD:只剩24GB显存

    00:17

    技术热点

    在windows 7桌面右键菜单上添加直接卸载USB设备的快捷菜单选项

    12个Java长久占居主要地位的原因

    SQL Server创建数据库的命令

    SQL Server 带列名导出到excel的实际操作

    MySQL字符串连接函数repeat()

    使用SQL Server日志转移实现高可用性

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。