LFS学习系列 第5章. 编译交叉工具链(1)

这篇具有很好参考价值的文章主要介绍了LFS学习系列 第5章. 编译交叉工具链(1)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

5.1 介绍

本章介绍如何构建交叉编译器及其相关工具。尽管这里的交叉编译是“伪造”、“假装”的,但其原理与真正的交叉工具链相同。 

本章中编译的程序将安装在$LFS/tools目录下,以使它们与以下章节中安装的文件分离。而另一方面,库被安装到它们的最终位置,因为它们属于我们想要构建的系统。

5.2. Binutils-2.41 - 第一遍

Binutils包包含一个链接器、一个汇编器和其它用于处理对象文件的工具。

所需磁盘空间:647MB。

5.2.1. 交叉Binutils的安装

注:

返回并重读“iii. General Compilation Instructions(一般编译指导)”部分中的注释。理解标记为“重要”的注意事项可以在以后省去很多问题。

这很重要,Binutils是编译的第一个包,因为Glibc和GCC都会对可用的链接器和汇编器执行各种测试,以确定要启用它们自己的哪些功能。

Binutils文档建议在专用的构建目录中构建Binutils:

mkdir -v build
cd       build

注:

为了使本书其余部分中列出的SBU值具有任何用途,请测量从配置到第一次安装(包括第一次安装)构建此软件包所需的时间。要轻松实现这一点,请将命令封装在时间命令中,如下所示:time{../configure…&&make&&makeinstall;}。

现在准备进行Binutils编译:

../configure --prefix=$LFS/tools \
             --with-sysroot=$LFS \
             --target=$LFS_TGT   \
             --disable-nls       \
             --enable-gprofng=no \
             --disable-werror

各配置选项的含义:

  • --prefix=$LFS/tools

此项告诉配置脚本准备在$LFS/tools目录中安装Binutils程序。 

  • --with-sysroot=$LFS

对于交叉编译,此项告诉构建系统根据需要在$LFS中查找目标系统库。

  • --target=$LFS_TGT

由于LFS_TGT变量中的机器描述与config.guess脚本返回的值略有不同,因此此开关将告诉configure脚本调整binutils的构建系统以构建交叉链接器。

  • --disable-nls

此项将禁用国际化,因为临时工具不需要i18n。 

  • --enable-gprofng=no

这将禁用临时工具不需要的构建gprofng。

  • --disable-werror

此项可以防止在主机的编译器发出警告时中止编译。

接着编译(源码)包:

make

安装(Binutils)包:

sudo make install

知识补充(以下内容参考GNU Binutils 介绍):

Binutils介绍

从事 Linux 开发的朋友们都不可避免地用到一些工具,比如 objcopy、nm、objdump、readelf 等等。其实这一系列的工具,就是所谓的 Binutils,当然 GNU 就表示它们都是可以自由地使用的 GNU 软件。

GNU Binutils,是 GNU Binary Utilities 的简写,一般简称为 Binutils。中文可以翻译为 GNU 的二进制工具集。显然,Binutils 是一组二进制工具的集合。也就是说,Binutils 不是指某一个工具,而是指一组工具,并且这些工具都是专门针对于二进制的。注意,这里千万不要理解错了,不是说这些 Binutils 工具只提供二进制文件,而是说这些工具的目的是用于操作二进制文件的,而不是针对于文本或者源代码。

再说一遍:Binutils 工具是专门用于操作二进制的,而不是用于去操作或者编译文本、源代码的。在 Linux 环境下,这种二进制文件主要指 *.o 文件和 elf 执行文件。显然,编译源代码的是 gcc,所以 Binutils 不包含 gcc(这是一种简单的说法,实际上还是有很多关联的)。

Binutils 工具

现在我们已经知道,Binutils 是一组工具集合,那到底包含了哪些工具呢?Binutils 中比较重要的是 ld 和 as。

ld —— 链接器
将多个目标文件,链接成一个可执行文件(或目标库文件)。

as —— 汇编器
将汇编源代码,编译为(目标)机器代码。

addr2line
将地址转换为(文件名和)行号的工具,一般主要用于反汇编。

ar
用来操作(.a)档案文件,比如创建,修改,提取内容等

c++filt
Filter to demangle encoded C++ symbols

dlltool
Creates files for building and using DLLs

gold
一个新的,速度更快的,只针对于ELF的链接器(可能还不是很成熟稳定)。

gprof
Displays profiling information

nlmconv
Converts object code into an NLM

nm
列出目标文件中的符号

objcopy
拷贝并翻译(转换)文件,可用于不同格式的二进制文件的转换。

objdump
显示目标文件中的信息。

ranlib
Generates an index to the contents of an archive

readelf
显示 ELF 格式的(目标)文件的信息。

size
显示目标文件或(.a)档案文件中的节(section)的大小。

strings
显示文件中的(可打印)的字符串信息。

strip
去除符号。一般用来把可执行文件中的一些信息(比如 debug 信息)去除掉,以实现在不影响程序功能的前提下,减少可执行文件的大小,减少程序的空间占用。

windmc
A Windows compatible message compiler

windres
A compiler for Windows resource files文章来源地址https://www.toymoban.com/news/detail-656412.html

到了这里,关于LFS学习系列 第5章. 编译交叉工具链(1)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 交叉编译工具 aarch64-linux-gnu-gcc 的介绍与安装

    AArch64 是随 ARMv8 ISA 一起引入的 64 位架构,用于执行 A64 指令的计算机。而且在 AArch64 状态下执行的代码只能使用 A64 指令集。,而不能执行 A32 或 T32 指令。但是,与 AArch32 中不同,在64位状态下,指令可以访问 64 位和 32 位寄存器。 aarch64-linux-gnu-gcc 是一个交叉编译工具链,可

    2024年04月14日
    浏览(49)
  • 安装交叉编译工具链aarch64-linux-gnu-g++ 以及cmake测试

       测试文件结构    CMakeLists.txt  参考文章: linux 交叉编译 C和C++_aarch64-linux-gnu-gcc查看版本_weixin_45302027的博客-CSDN博客 ubuntu16.04 安装交叉编译工具aarch64-linux-gnu-gccg++_ubuntu 安装aarch64-linux-gnu-gcc_普通网友的博客-CSDN博客

    2024年02月12日
    浏览(51)
  • 下载较老版本或最新版本的ARM Linux gcc 交叉编译工具链

    如果开发的 ARM 平台比较的多,需要多个版本的 arm gcc 交叉编译工具链,那么如何获取较新版本的 arm gcc 交叉编译工具链呢? 速度较快的,也比较新的,就到 ARM 官方网站下载 下载地址: https://developer.arm.com/downloads/-/gnu-a GNU-A Downloads 最新的下载地址: https://developer.arm.com/do

    2024年02月14日
    浏览(54)
  • 交叉编译工具链arm-linux-gnueabihf的安装-ubuntu 20.04

    http://t.csdn.cn/ZbjFX 建议直接在.bashrc文件作修改 ,修改方式相同 ( vi :视自己的编辑器而定) 因为我在修改profile文件后,环境变量生效,但是命令行的用户名等颜色高亮显示会消失;并且重启终端后,又需要再source一下profile。 但是将环境变量添加至.bashrc则不会出现这两个问题

    2024年02月11日
    浏览(52)
  • ARM架构Linux操作系统上C语言版本的CycloneDDS中HelloWorld的编译过程(交叉编译工具链)

    ARM架构Linux操作系统上C语言版本的 CycloneDDS 中 HelloWorld 的编译过程与源码编译过程中的 roundtrip 示例编译是一样的,因为实在ARM架构上,所以需要将 idlc_generat e注释掉,自己手动添加源代码和头文件,之后在进行 cmake 和 make 操作

    2024年02月15日
    浏览(43)
  • 一文搞懂交叉编译,Windows和Linux的交叉编译

    在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,我们就称这种编译器支持交叉编译。这个编译过程就叫交叉编译。简单地说,就是在一个平台上生成另一个平台上的可执行代码。这里需要注意的是所谓平台,实际上包含两个概念:体系结构(

    2024年02月07日
    浏览(65)
  • 重新理解Linux交叉编译及编译流程

    参考书籍 1、编译原理 2、嵌入式Linux应用开发 当我们开发目标是一个嵌入式设备时,便需要在PC机上编译出能在该嵌入式设备上运行的可执行文件,这里编译主机与目标运行主机不是同一个设备,那么该过程就称为交叉编译;而编译是指一个源代码文件(这里指的是编译性程

    2023年04月08日
    浏览(35)
  • Linux——ARM交叉编译环境搭建

    可依据自己当前的环境进行选择下载,官网如下​​​ Downloads | GNU-A Downloads – Arm Developer 我这边选择如下,用于4412开发板的 gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf.tar.xz mkdir  /usr/local/arm tar -xvf gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf.tar.xz 在 vim /root/.bashrc 或 vim /etc/profi

    2024年02月21日
    浏览(53)
  • 【交叉编译环境】安装arm-linux交叉编译环境到虚拟机教程(简洁版本)

    就是看到了好些教程有些繁琐,我就写了一个 我这个解压安装的交叉编译环境是Linaro GCC的一个版本,可以用于在x86_64的主机上编译arm-linux-gnueabihf的目标代码 步骤来了 在你的Ubuntu系统中 创建一个目录 ,例如/usr/local/arm,然后将下载好的gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueab

    2024年02月03日
    浏览(43)
  • ARM_Linux的交叉开发以及交叉编译器

    目录 为什么要使用交叉开发 为什么要使用交叉编译 交叉编译器的安装 交叉编译器的使用 交叉开发是指在通用的电脑上吧程序编写,编译,调试好,再下载到嵌入式产品中去运行,对于一些简单的程序的话,直接在电脑上编译调试好即可,但是对于一些需要操作硬件的开发

    2024年01月23日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包