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

    IT技术网

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

    重走LFS之路:(五) 工具链编译-2

    2015-04-06 00:00:00 出处:w3cplus
    分享

    继续来编译工具,接下来编译Glibc

    重走LFS之路:(五) 工具链编译-2

    (题图来自: techradar.com)

    if [ ! -r /usr/include/rpc/types.h ]; then
    su -c ‘mkdir -pv /usr/include/rpc’
    su -c ‘cp -v sunrpc/rpc/*.h /usr/include/rpc’
    fi
    
    tar -xf glibc-2.21.tar.xz
    cd glibc-2.21/
    mkdir -v ../glibc-build
    cd ../glibc-build/
    
    ../glibc-2.21/configure /
    –prefix=/tools /
    –host=$LFS_TGT /
    –build=$(../glibc-2.21/scripts/config.guess) /
    –disable-profile /
    –enable-kernel=2.6.32 /
    –with-headers=/tools/include /
    libc_cv_forced_unwind=yes /
    libc_cv_ctors_header=yes /
    libc_cv_c_cleanup=yes
    
    make
    make install

    编译安装没什么新鲜的,不同的是需要测试一下

    echo ‘main(){}’ > dummy.c
    $LFS_TGT-gcc dummy.c
    readelf -l a.out | grep ‘: /tools’

    这时候回显一行

    [Requesting program interpreter: /tools/lib64/ld-linux-x86-64.so.2]

    最后删除测试文件

    rm -v dummy.c a.out

    编译Libstdc++有点麻烦,需要先重命名一下gcc-build,免得和上次的编译目录掺和了

    回到$LFS/src,然后执行以下命令

    mv gcc-build gcc-build.first

    新建gcc-build目录

    mkdir -pv  gcc-build
    cd gcc-build

    调整Libstdc++配置

    ../gcc-4.9.2/libstdc++-v3/configure /
    –host=$LFS_TGT /
    –prefix=/tools /
    –disable-multilib /
    –disable-shared /
    –disable-nls /
    –disable-libstdcxx-threads /
    –disable-libstdcxx-pch /
    –with-gxx-include-dir=/tools/$LFS_TGT/include/c++/4.9.2

    然后编译安装就好了

    make
    make install

    进度很快,大家要二次编译binutils了

    在此之前,我们需要回到$LFS/src,然后重命名binutils-build,再新建一个

    mv binutils-build binutils-build.first
    mkdir -v binutils-build
    cd binutils-build
    
    CC=$LFS_TGT-gcc /
    AR=$LFS_TGT-ar /
    RANLIB=$LFS_TGT-ranlib /
    ../binutils-2.25/configure /
    –prefix=/tools /
    –disable-nls /
    –disable-werror /
    –with-lib-path=/tools/lib /
    –with-sysroot

    编译安装

    make
    make install

    第二次编译安装binutils之后,需要调整一下连接器来进行主体编译

    make -C ld clean
    make -C ld LIB_PATH=/usr/lib:/lib
    cp -v ld/ld-new /tools/bin

    至此binutils二次编译安装调整完毕,接下来要进行gcc的二次编译

    进入gcc源码目录

    cd $LFS/src/gcc-4.9.2

    我们需要先写一个限制文件

    cat gcc/limitx.h gcc/glimits.h gcc/limity.h > /
    `dirname $($LFS_TGT-gcc -print-libgcc-file-name)`/include-fixed/limits.h

    然后调整一下编译环境

    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

    加入mpfr,gmp,mpc三个包的支持

    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

    重命名libc++编译的目录

    mv ../gcc-build ../gcc-build.libc++

    新建编译目录

    mkdir -v ../gcc-build
    cd ../gcc-build

    配置编译选项

    CC=$LFS_TGT-gcc /
    CXX=$LFS_TGT-g++ /
    AR=$LFS_TGT-ar /
    RANLIB=$LFS_TGT-ranlib /
    ../gcc-4.9.2/configure /
    –prefix=/tools /
    –with-local-prefix=/tools /
    –with-native-system-header-dir=/tools/include /
    –enable-languages=c,c++ /
    –disable-libstdcxx-pch /
    –disable-multilib /
    –disable-bootstrap /
    –disable-libgomp

    编译后安装

    make
    make install

    在这之后我们需要做个软连接

    ln -sv gcc /tools/bin/cc

    接下来写个文件测试一下

    echo ‘main(){}’ > dummy.c
    cc dummy.c
    readelf -l a.out | grep ‘: /tools’

    回显应该还是这个

    [Requesting program interpreter: /tools/lib64/ld-linux-x86-64.so.2]

    最后清理一下测试文件

    rm -v dummy.c a.out

    两次编译binutils和gcc之后,进入tcl的编译安装

    回到$LFS/src目录,解压tcl源码

    tar zxvf tcl8.6.3-src.tar.gz
    cd tcl8.6.3
    cd unix

    配置编译选项

    ./configure –prefix=/tools

    编译并测试

    make
    
    TZ=UTC make test

    重走LFS之路:(五) 工具链编译-2

    这个此时结果里面有几个数,Total是一共做了多少项测试,Passed是这些测试中通过了多少项,Skipped是跳过了几项测试,Failed是这些测试中有多少失败了。

    从这份结果中,我们可以看到tcl编译完全正常,一共116项测试,全部通过,这就意味着可以安装了

    make install

    下面给tcl库文件加上属主的写权限

    chmod -v u+w /tools/lib/libtcl8.6.so

    回显应该是这样

    mode of `/tools/lib/libtcl8.6.so’ changed from 0555 (r-xr-xr-x) to 0755 (rwxr-xr-x)

    安装tcl的头

    make install-private-headers

    回显应该是这样

    Installing private header files to /tools/include/

    做个软连接

    ln -sv tclsh8.6 /tools/bin/tclsh

    继续进行expect编译,解压并进入expect目录

    tar zxvf expect5.45.tar.gz
    cd expect5.45

    首先得重写configure文件

    cp -v configure{,.orig}
    sed ‘s:/usr/local/bin:/bin:’ configure.orig > configure

    配置编译选项

    ./configure –prefix=/tools /
    –with-tcl=/tools/lib /
    –with-tclinclude=/tools/include

    编译和测试

    make
    make test

    重走LFS之路:(五) 工具链编译-2

    本次测试我们发现一共有26个用例,其中通过了15个,有11个失败了。不过在LFS 7.7的官方文档中有这么一句

    Note that the Expect test suite is known to experience failures under certain host conditions that are not within our
    control. Therefore, test suite failures here are not surprising and are not considered critical.

    这就说明测试用例失败不代表主要依据,所以我们继续往下安装,只要安装和使用不出问题,就没关系。

    make SCRIPTS=”” install

    安装没有报错,所以我们不必担心那近乎一半的测试用例失败。

    继续我们回到$LFS/src并解压并配置编译DejaGNU

    tar zxvf dejagnu-1.5.2.tar.gz
    cd dejagnu-1.5.2
    ./configure –prefix=/tools

    这个配置完编译选项之后可以直接安装并检查编译

    make install
    make check

    重走LFS之路:(五) 工具链编译-2

    测试结果Summary显示有68个测试通过,没有失败信息

    接下来是check的编译安装,check有点特殊的是,在配置编译选项的时候,需要将配置结果设置一个变量。回到$LFS/src,解压并进入源码目录

    tar zxvf check-0.9.14.tar.gz
    cd check-0.9.14

    开始配置编译选项

    PKG_CONFIG= ./configure –prefix=/tools

    除了这个没什么新鲜的,就是configure的最后有个Summary of Check options

    重走LFS之路:(五) 工具链编译-2

    再就是编译和编译检查

    make
    make check

    重走LFS之路:(五) 工具链编译-2

    检查结果显示,7个测试全部通过,安装即可

    make install

    安装成功后回到$LFS/src,继续解压ncurses并进入源码目录

    cd $LFS/src
    tar zxvf ncurses-5.9.tar.gz
    cd ncurses-5.9

    下面的倒是没新鲜的,配置编译选项并且编译安装就可以了

    ./configure –prefix=/tools /
    –with-shared /
    –without-debug /
    –without-ada /
    –enable-widec /
    –enable-overwrite
    
    make
    make install

    回到$LFS/src,解压bash并进入源码目录

    cd $LFS/src
    tar zxvf bash-4.3.30.tar.gz
    cd bash-4.3.30

    配置编译选项并且编译

    ./configure –prefix=/tools –without-bash-malloc

    进行编译测试并且安装

    make tests
    make install

    再加个软连接就完成了

    ln -sv bash /tools/bin/sh

    解压编译安装bzip2

    cd $LFS/src
    tar zxvf bzip2-1.0.6.tar.gz
    cd bzip2-1.0.6
    make
    make PREFIX=/tools install

    来进行编译coreutils,还是先回到$LFS/src,再解压并进入coreutils源码目录

    cd $LFS/src
    tar -xf coreutils-8.23.tar.xz
    cd coreutils-8.23

    配置coreutils的编译选项

    ./configure –prefix=/tools –enable-install-program=hostname

    编译后测试,这次测试需要加个选项

    make
    make RUN_EXPENSIVE_TESTS=yes check

    重走LFS之路:(五) 工具链编译-2

    测试结果显示,共306项测试,通过270项,跳过36项,没有失败和错误,继续安装就可以了

    make install

    接下来的diffutils没有新鲜的,配置安装路径后编译,检查安装就好了

    cd $LFS/src
    tar -xf diffutils-3.3.tar.xz
    cd diffutils-3.3
    ./configure –prefix=/tools
    make
    make check

    重走LFS之路:(五) 工具链编译-2

    测试结果显示共140项,通过112项,跳过28项,可以正常安装

    make install

    接下来的file也如是一样

    cd $LFS/src
    tar zxvf file-5.22.tar.gz
    cd file-5.22
    ./configure –prefix=/tools
    make
    make check
    make install

    下一个是findutils,同样的步骤

    cd $LFS/src
    tar zxvf findutils-4.4.2.tar.gz
    cd findutils-4.4.2
    ./configure –prefix=/tools
    make
    make check

    重走LFS之路:(五) 工具链编译-2

    测试结果表明,28项测试全部通过,没有失败记录,可以安装

    make install

    继续下一个软件编译,gawk过程也没新鲜的,老规矩

    cd $LFS/src
    tar -xf gawk-4.1.1.tar.xz
    cd gawk-4.1.1
    ./configure –prefix=/tools
    make
    make check

    重走LFS之路:(五) 工具链编译-2

    检查结果认为有6项测试失败,先不去理会,继续安装

    make install

    下一个软件是gettext,这个稍微有点复杂

    首先依旧进入$LFS/src来解压并进入源码目录

    cd $LFS/src
    tar -xf gettext-0.19.4.tar.xz
    cd gettext-0.19.4

    先进入gettext-tools目录

    cd gettext-tools

    配置编译选项

    EMACS=”no” ./configure –prefix=/tools –disable-shared

    接下来需要分别编译

    make -C gnulib-lib
    make -C intl pluralx.c
    make -C src msgfmt
    make -C src msgmerge
    make -C src xgettext

    之后来手动安装到/tools/bin下面

    cp -v src/{msgfmt,msgmerge,xgettext} /tools/bin

    继续解压编译安装grep

    tar -xf grep-2.21.tar.xz
    cd grep-2.21
    ./configure –prefix=/tools
    make
    make check

    重走LFS之路:(五) 工具链编译-2

    测试结果显示共测试138项,通过120项,跳过18项,可以正常安装

    make install

    接下来的gzip也如是一样

    cd $LFS/src
    tar -xf gzip-1.6.tar.xz
    cd gzip-1.6
    ./configure –prefix=/tools
    make
    make check

    重走LFS之路:(五) 工具链编译-2

    检测结果显示共15项测试,通过15项,可以正常安装

    make install

    继续下一个,M4的编译安装

    cd $LFS/src
    tar -xf m4-1.4.17.tar.xz
    cd m4-1.4.17
    ./configure –prefix=/tools
    make
    make check

    重走LFS之路:(五) 工具链编译-2

    检查结果显示,共163项测试,通过142项,跳过21项,可以正常安装

    make install

    继续来编译make

    cd $LFS/src
    tar jxvf make-4.1.tar.bz2
    ./configure –prefix=/tools –without-guile
    make
    make check

    重走LFS之路:(五) 工具链编译-2

    检测结果显示,共544项测试,没有失败,可以正常安装

    make install

    大部分的工具软件都是指定一下prefix参数就可以编译安装了,只有个别的需要做一下其他的调整。随后,还会有一部分工具需要编译安装。

    上一篇返回首页 下一篇

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

    别人在看

    正版 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头条

    公安部:我国在售汽车搭载的“智驾”系统都不具备“自动驾驶”功能

    02:03

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

    01:17

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

    16:30

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

    15:43

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

    15:17

    技术热点

    商业智能成CIO优先关注点 技术落地方显成效(1)

    用linux安装MySQL时产生问题破解

    JAVA中关于Map的九大问题

    windows 7旗舰版无法使用远程登录如何开启telnet服务

    Android View 事件分发机制详解

    MySQL用户变量的用法

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

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