linux入门基础(三)Gcc编译编程

Linux下GCC入门 交叉编译指在一个平台上编译生成可以在另一个平台上运行的程序。GCC 可以进行交叉编译,尤其在嵌入式开发中非常常用。在编译大型项目时,可以使用 -j 选项来加速编译过程。该选项指定并行编译时使用的线程数。 阅读详情

Gcc编译

 

1.文件类型

 

.c       C原始程序

.o       目标文件

.h       头文件

.i       已经预处理的C原始文件

.ii      已经预处理的C++原始文件

.a       编译后的静态库文件

.so      编译后的动态库文件

静态库:在编译链接时库文件的代码全部加到可执行文件中,文件比较大,运行时就需要库文件了。

动态库:在程序运行时链接文件加载库,节约系统开销

 

2.Gcc编译流程

 

(1).预编译

gcc -E linux.c -o linux.i

gcc [选项] 文件 [选项] 目标文件

注:目标文件可缺省

预编译前:

  

 

预编译后:

     

对比两个文件的差别,得出预编译所做的工作:

1)引入:删除#include指示,并将stdio.h的内容加入到程序中来对其进行响应,

2)替换:删除恶劣#define指示,并将该文件所有PI替换为指定值

3)把注释替换成一个空格字符

4)删除一些不必要的空格

Ps:这个.i文件有助于调试错误程序

2.编译

 

 

 

1)       检查代码的规范性、是否有语法错误

2)       翻译成汇编代码

 

3.汇编

就是把汇编代码转化为“.o ”的二进制目标代码,

 

 

 

4.链接

  在源文件中没有函数printf的实现,即使在预编译文件中也只有printf的函数声明,而系统将这些函数实现都放到libc.so.6的库文件中去了,没有特别设置,GCC就会到系统默认的搜索路径“/usr/lib”下查找,就是链接到libc.so.6库文件中(以动态库形式加载)

 

  

 

最后生成可执行文件

 

 

 

指令参数说明:

 

    -  E只进行预编译,不做其他处理

    gcc   -E    linux.c     -o linux.i

 

      -o file   把输出传到文件file中

 

  gcc   –S   linux.i      -o linux.s

 

     –S 只是进行编译不汇编,生成汇编代码

 

  gcc   -c    linux.s      -o linux.o

 

      -c 只是编译不链接,生成目标代码

 

  gcc    linux.o    -o  linux

 

之前的都是分步执行,是为了说明整个编译过程,如果想一步就输出,可以:                          

 gcc   linux.c –o 输出文件

 

Linux | GCC 编译器+Makefile >>Makefile功能强大,更多内容添加交流群获取文档。 阅读详情

相关推荐

深入Linux下的GCC编译器:从入门到精通

GCC最初作为GNU操作系统的官方编译器被开发,现在已经成为最流行的编译器之一。它被设计为可移植的,并且可以在多种架构上编译出高效的代码。GCC通过预处理器、编译器、汇编器和链接器四个阶段处理代码,将源代码转换成机器语言。在深入探讨静态和动态链接之前,我们首先需要了解链接的概念。链接是指在编译过程的最后阶段,编译器或链接器将各个编译单元(如目标代码、库文件等)合并为一个单一的可执行文件的过程。

小灰灰的博客 2227

编译原理 (预处理>编译>汇编>链接)

转载http://www.cnblogs.com/pipicfan/archive/2012/07/10/2583910.html一般高级语言程序编译的过程:预处理、编译、汇编、链接。gcc在后台实际上也经历了这几个过程,我们可以通过-v参数查看它的编译细节,如果想看某个具体的编译过程,则可以分别使用-E,-S,-c和 -O,对应的后台工具则分别为cpp,cc1,as,ld。下面我们将逐步分析这几个

哒哒的博客 6296

GWAS与eQTL相结合,进一步筛选疾病相关基因

欢迎关注”生信修炼手册”!在GWAS分析结果中,大部分显著的SNP位点都位于非编码区,很难直接挖掘这些位点的调控机制。通常假设与疾病关联的SNP位点通过调控基因表达来发挥作用,而eQTL...

庐州月光的博客 1万+

Linux——gcc -c -o 等参数的解释

当我们写好了C语言的代码之后,下一步就是gcc编译运行,这里对gcc代码的部分参数加以解释。 一个程序最终是为了生成一个可执行文件。 完整的流程:源程序,预处理,编译生成汇编,可执行文件 ——————.c————.i—————.s————(自动执行) 示例: 一、不使用参数,直接gcc 通过gcc 不加参数可以一步直接编译生成可执行文件. gcc main.c _这里自动生成的是可执行文件默认为a.out,当然可以通过-o选项更改生成文件的名字,比如将生成的可执行文件命名为HelloWord;Hell.

Wyatt_zhai 1万+

手把手教你用TJA1145A实现CAN节点智能唤醒(含数据帧过滤技巧)

本文详细介绍了如何使用TJA1145A收发器实现CAN节点的智能唤醒功能,包括数据帧过滤技巧和超低功耗设计。通过硬件级帧过滤和双条件唤醒机制,TJA1145A在保持微安级休眠电流的同时,能对特定报文做出毫秒级响应,显著提升电池供电设备的续航能力。

weixin_28721917的博客 251

别再只调PID了!手把手教你从LC谐振到检波,搞定STM32智能车电磁循迹硬件电路

本文深入解析STM32智能车电磁循迹硬件电路设计,从LC谐振选频到数字信号处理,提供完整的信号链路设计要点与实战技巧。通过优化电磁杆布局和信号放大电路,显著提升赛道位置检测精度,误差可控制在±0.5cm以内,为智能车竞赛提供可靠硬件支持。

weixin_29220405的博客 264

Linux(程序设计):05---gcc的基本用法

一、相关选项 -c:编译生成目标文件(object file),即.o文件 -o:后面接文件名,用来指定gcc生成的文件名,如果没有-o,那么生成的是gcc默认的文件名 -g:产生符号调试工具(gdb)所必要的符号资讯(符号表),要想对源代码进行调试,就必须加入这个选项 -Wall:以最高级别使用GNU编译程序,专门用于显示警告信息 -O/-O1:对程序进行优化编译、链接,这样产生的可...

董哥的黑板报 1106

Python+Tableau 全流程数据分析实战:从数据清洗到商业洞察可视化

本文通过Python+Tableau完整演示电商销售数据分析流程。首先使用Python进行数据清洗(缺失值处理、异常值过滤等)和探索性分析(商品类别、时间趋势等),然后导入Tableau创建交互式可视化仪表盘。分析发现电子产品销售额最高但利润率低,美妆类利润率最优,东部地区销售表现最好。最终提出优化供应链、加强美妆推广等商业建议,展示了Python数据处理与Tableau可视化的高效配合。所有代码可直接运行,适合数据分析初学者和从业者实战参考。

weixin_44520581的博客 337

linux:gcc编译器的四个阶段

第一阶段:预处理 这个阶段输入*.c源文件,这个阶段主要处理的是文件中的带“#”的语句,输出一个 .i 文件 gcc –E file.c –o file.i 第二阶段:编译阶段 这个阶段输入第一阶段生成的 .i 文件,输出成汇编语言的 .s 文件 gcc –S file.i –o file.s 第三阶段:汇编阶段 这个阶段将第二阶段的汇编文件 .s 文件输入,然后编译成机器语言 .o...

SSSS的博客 1218

[RK3588-Android12] 深入解析USB Type-C PD充电功能的DTS配置与内核驱动修改

本文深入探讨了在RK3588 Android12平台上禁用USB Type-C PD充电功能的实现方法。通过分析设备树(DTS)配置与内核驱动(TCPM框架)的联动修改,详细解读了如何通过添加`pd-disable`属性及修改`tcpm.c`驱动代码,使Type-C端口绕过PD协议协商,仅工作在传统电源模式,以满足工控等特定场景对供电稳定性和成本控制的需求。

9o8p7i6u5y的博客 994

SAP FICO CBS接口-银企直连付款平台功能开发说明书(包括测试样例、FS)

SAP FICO CBS接口-银企直连付款平台功能开发说明书(包括测试样例、FS)

我好像病了的博客 2449

linux中用gcc编译源代码的四个步骤(转载)

在Linux下进行C语言编程,必然要采用GNU GCC来编译C源代码生成可执行程序。 一、GCC快速入门 Gcc指令的一般格式为:Gcc [选项] 要编译的文件 [选项] [目标文件] 其中,目标文件可缺省,Gcc默认生成可执行的文件名为:a.out 然后输入./a.

shijiemoxing的专栏 1万+

Briefings in Bioinformatics投稿经验分享

Briefings in Bioinformatics投稿经验分享

LiRongLu_的博客 3340

linux编程——认识GCC编译器

GCC 是一套由 GNU 开发的编程语言编译器,它支持多种编程语言,包括 C、C++、Objective-C、Fortran、Ada 和 Go 等。GCC 以其高效、稳定和可移植性而闻名于世,被广泛应用于各种操作系统,尤其是 Linux 系统。

千千道的博客 2144

Hermes Agent 对阵 OpenClaw:自我改进的 AI 队友

但在 2026 年 2 月,Nous Research 发布了 Hermes Agent,它带来了不同的愿景:一个不仅能够运行,还能学习的代理。在完成复杂的多步骤任务后,它会分析自己的操作并创建一个可复用的技能。对于已在使用 OpenClaw 的澳大利亚企业而言,这意味着您可以试用 Hermes Agent,而无需丢失数月的配置和自定义成果。最重要的区别在于理念:OpenClaw 是一个需要配置的工具,而 Hermes Agent 则是一个会学习的队友。OpenClaw 的技能是静态的。

xiaoshun007的专栏 1571

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

【Linux】GCC编译器(七)

GCC的通用性使得它在不同的操作系统和平台上都能够使用,包括Linux、Unix、macOS等,这使得开发者可以使用同一套工具在不同的环境下进行开发,提高了开发的效率和一致性。除此之外,GCC已经成为了许多开发环境和工具链的标准组件,许多集成开发环境(IDE)和构建工具都提供了对GCC的支持,这使得开发者可以更轻松地使用GCC进行开发和构建。此外,GCC拥有丰富的功能和选项,支持多种编程语言,包括C、C++、Objective-C、Fortran等,可以满足各种不同项目的需求,从小型工具到大型软件项目。

hdz_wiz_csdn的博客 2371

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Linux下的GCC编译器

GCC是GNU公社的一个项目,它是GNU Compiler Collection的缩写,起初,GCC只是一个C语言编译器(GNU C Collection),随着开发者的加入,GCC已扩展为可以编译C、C++、Java、Objective-C等多种编程语言的编译器集合了。如今的GCC也具有了交叉编译的功能,即在一个平台上编译另一个平台的代码。所谓编译器,可以简单地将其理解为“翻译器”。

asddrsq的博客 3206

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Linux GCC 编译详解

介绍 linux 下 GCC 的使用

weixin_45004203的博客 5452

零基础上手gcc/g++:Linux编译轻松学

首先我们来学习一下gcc、g++二者之间的关系gcc英文全称为:GUN C Compiler,是GCC中的c编译器g++英文全称为:GUN C++ Compiler,是GCC中的c++编译器。gcc和g++ 两者都可以编译c和cpp文件,但存在差异。gcc在编译cpp时语法按照c来编译但默认不能链接到c++的库(gcc默认链接c库,g++默认链接c++库)。g++编译.c和.cpp文件都统一按cpp的语法规则来编译。所以一般编译c用gcc,编译c++用g++。

2301_80774875的博客 2298

Linux编程及GCC编译器

a.out 这个文件的命名是 GCC 编译器自动命名的,在使用 gcc 命令的时候加上-o 来指定生成的可执行文件名字,比如编译 main.c 以后生成名为“main”的可执行文件。当编译完成以后会生成一个 a.out 文件,这个 a.out 就是编译生成的可执行文件,执行此文件看看是否和我们代码的功能一样,执行的方法很简单使用命令:“./+可执行文件”,比如本例程就是命令: ./a.out。-c: 只编译不链接为可执行文件,编译器将输入的.c 文件编译为.o 的目标文件。

hackerbird的博客 917

【Linux探索学习】第八弹——Linux工具篇(三):Linux 中的编译器 GCC 的编译原理和使用详解_linux 使用gcc编译器

GCC 是一个开源的编译器,它由 GNU 项目开发,最初只支持 C 语言,后来扩展支持 C++、Fortran、Ada、Objective-C 及其他语言。它是 Linux 和其他 UNIX 系统中最常用的编译器之一。GCC 是 Linux 中强大的编译工具,灵活且功能丰富。熟练掌握 GCC 的使用,有助于提升编程效率,并使得开发过程更加顺畅。希望本文能为你提供一个良好的起点,帮助你开始使用 GCC 编译器。!!

weixin_59666837的博客 1782

Linux基础 gcc编译器

当系统加载可执行代码时候,能够知道其所依赖的库的名字,但是还需要知道绝对路径,此时就需要系统动态载入器(dynamic linker/loader),对于elf格式的可执行程序,是由ld -linux.so*来完成的,它先后搜索elf文件的 DT_RPATH段,环境变量LD_LIBRARY_PATH /etc/ld.so.cache文件列表—/lib/,/usr/lib目录找到库文件后将其载入内存。库既可以是静态的也可以是动态的。链接器将多个目标文件链接成一个完整的,可加载的,可执行的目标文件。

wangdsh的博客 3261

GCC编译器入门指南:从基础到多文件编译

本文介绍了GCC编译器的基础用法和编译流程,适合C语言初学者和需要优化代码性能的开发者。文章从GCC的安装与验证开始,逐步引导读者编写并编译第一个GCC程序,详细解释了GCC的编译流程,包括预处理、编译、汇编和链接四个阶段。此外,文章还介绍了常用的编译选项,如基础选项、调试与优化选项、头文件与库的指定等,并提供了编译多文件项目的方法,包括直接编译和分步编译。最后,文章还涉及了静态库与动态库的创建与使用,以及常见问题的解决方法。通过本文,读者可以掌握GCC的基础知识,为进一步学习和优化代码打下坚实基础。

qq_22825391的博客 1052

GCC编译 #Linux基础操作

在windows上编译程序时,会使用到如vscode、Visual studio、keil MDK等IDE,这些IDE很方便,直接把各种编译器进行了整合,用户不用再考虑编译工具的问题。在Linux上开发时,没有这么丰富的IED可用,并且自己调用编译器更灵活,于是需要自己使用编译工具对代码进行编译。

AFK3060的博客 1063

Linux 基础入门操作-实验一 GCC使用

源代码就是程序员写出来的一个个代码文件,包括头文件和源文件。机器码是 CPU 可以直接解读的数据,由 0、1 组成,跟平台相关,ARM 平台跟 x86 平台的机器码是不一样的。程序语言是为了方便程序员的开发而产生的,用机器码开发程序是不可能的,于是出现了汇编、c、c++、c#、java 等程序语言,它们都需要经过编译器的编译生成可执行程序(由机器码组成)。

huanghongqi11的博客 944

linux GCC编译C程序

linux GCC编译C程序 GCC已不再是主要针对GNU项目自身的软件的小型C语言编译器了。如今,它已支持了许多不同的语言,包括C、C++、Ada、Fortran、Objective C,甚至还有Java。 利用gcc原理上是经过两步编译的,分别生成目标代码和Linux可执行程序。 1. 编译单个源文件 hello_linux.c #include<stdio.h> #incl...

SkYe's Blog 1329
上一篇: linux入门(二)Vim&vi 基本操作
下一篇: linux入门基础(四)Gdb调试程序
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值