怎样用linux下载gcc(linux中gcc)
Linux内核是一个复杂的开源项目,主要的创建语言是c语言和汇编语言。 因此,要深入理解Linux内核,必须精通c语言。 Linux内核由世界顶级程序员编写,其中采用了许多精巧的c语言制作技术,是非常值得学习的典范。
此外,Linux内核使用GCC编译器进行编译,需要理解和熟悉GCC编译器和GDB调试器的使用。
Linux内核代码达到2000万行。 庞大的代码量让读者觉得在阅读和理解代码方面不够努力。 有适合在Linux上阅读和编写代码的工具吗?
由于Linux内核创始人Linus开发的git工具已经在世界范围内广泛使用,读者也必须了解和熟悉git的使用。
Linux常用的编译工具GCC。
GCC工具
通用集成电路(GCC )编译器于1987年发布了第一个c语言版本。 这是通过GPL许可证发布的免费软件,也是GNU计划的重要部分。 GCC现在是GNU Linux操作系统的缺省编译器,也被许多自由软件采用。 GCC在之后的发展过程中,扩展支持了c、Java、Go等多种编程语言。 此外,GCC还支持x86、ARM等多种硬件平台。GCC的编译过程主要分为四个步骤。
预处理预处理预处理预编译组件Assemble链接链接如图2.1所示,用c语言编写test程序的源代码test.c。 首先进入GCC的预处理器(cpp )进行预处理,解压缩头文件、宏等,生成test.i文件。 然后,进入GCC的编译器。 由于GCC可以支持多种编程语言,因此在此调用c语言的编译器ccl。 编译完成后生成汇编器,并输出test.s文件。 在装配阶段,GCC调用汇编器(as )进行汇编,生成可重定位的目标程序。 最后一步是链接。 GCC调用链接器,将所有目标文件和c语言标准库链接到可执行的二进制文件。
图1.1 GCC编译流程
由此可知,c语言代码需要经过两次编译和一次链接过程才能生成可执行的程序。
1.1.2 ARM GCC
GCC具有优异的可扩展性,可以编译x86体系结构的二进制文件,还可以支持ARM、MIPS、RISC-V等许多其他体系结构的处理器。 这里涉及两个概念。 一个是本地编译,另一个是交叉编译。本地编译:在当前目标平台上编译且可以在当前平台上运行的程序。 交叉编译:在一个平台上编译,在另一个平台上运行的过程称为交叉编译。 之所以有交叉编译,主要是因为嵌入式系统的资源有限,不适合在嵌入式系统中进行编译。 例如,如果早期的ARM处理器性能下降,编译完整的Linux系统是不现实的。 因此,首先,可以在ARM处理器上执行的Linux二进制文件在高性能计算机上编译,然后写入ARM系统中执行。 交叉工具链:交叉工具链不仅包括GCC,还包括由binutils、glibc等工具组成的综合开发环境,实现编译、链接等功能。 嵌入式环境通常使用小型c语言库,如uclibc。 交叉工具链的命名规则一般如下。
arch -操作系统- GNU EABI
arch :表示arm、MIPS等体系结构。 操作系统:表示目标操作系统。 eabi :嵌入式APP的二进制接口。 许多Linux发行版提供了预编译的ARM GCC工具链。 例如,优麒麟Linux 18.04提供了以下与ARM相关的编译器:
arm-linux-gnueabi :主要用于基于ARM32架构的Linux系统,可以用于编译ARM32架构的u-boot、Linux内核和Linux APP应用程序等优麒麟Linux 18.04系统提供了GCC 5、GCC 6、GCC 7、GCC 8等多个版本。 aarch-linux-gnueabi :主要用于基于ARM64体系结构的Linux系统。 ARM-linux-gnueabihf:hf是指支持硬件浮点(Hard Float )的arm处理器。 以前的ARM处理器不支持硬件浮点单元,因此在软件浮点中实现。 但是,由于最新的高端ARM处理器内置了硬件浮点单元,新旧体系结构的不同导致了两种不同的EABI接口。
1.1.3 GCC编译
GCC编译的一般格式:GCC源文件“选项”目标文件
GCC的一般选项如表1.1所示。
表1.1 GCC的一般选项
本文摘自《奔跑吧 Linux内核 入门篇》
#pgc-card .pgc-card-href { text-decoration: none; outline: none; display: block; width: 100%; height: 100%; } #pgc-card .pgc-card-href:hover { text-decoration: none; } /*pc 样式*/ .pgc-card { box-sizing: border-box; height: 164px; border: 1px solid #e8e8e8; position: relative; padding: 20px 94px 12px 180px; overflow: hidden; } .pgc-card::after { content: " "; display: block; border-left: 1px solid #e8e8e8; height: 120px; position: absolute; right: 76px; top: 20px; } .pgc-cover { position: absolute; width: 162px; height: 162px; top: 0; left: 0; background-size: cover; } .pgc-content { overflow: hidden; position: relative; top: 50%; -webkit-transform: translateY(-50%); transform: translateY(-50%); } .pgc-content-title { font-size: 18px; color: #222; line-height: 1; font-weight: bold; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .pgc-content-desc { font-size: 14px; color: #444; overflow: hidden; text-overflow: ellipsis; padding-top: 9px; overflow: hidden; line-height: 1.2em; display: -webkit-inline-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; } .pgc-content-price { font-size: 22px; color: #f85959; padding-top: 18px; line-height: 1em; } .pgc-card-buy { width: 75px; position: absolute; right: 0; top: 50px; color: #406599; font-size: 14px; text-align: center; } .pgc-buy-text { padding-top: 10px; } .pgc-icon-buy { height: 23px; width: 20px; display: inline-block; background: url(https://lf6-cdn-tos.bytescm.com/obj/cdn-static-resource/pgc/v2/pgc_tpl/static/image/commodity_buy_f2b4d1a.png); } 正版 奔跑吧 Linux内核 入门篇 Linux就该这么学 Linux入门操作系统入门教程 ttdpj开发运维书 Linux4内核 从零开始学习Linux内核 ¥56.5 购买
end
喜欢的朋友欢迎转发到朋友圈