当前位置: 首页 > news >正文

Linux | gcc编译篇

01  

为什么学习嵌入式Linux和嵌入式单片机,因为AI未来十几年还无法替代。

gcc 全称(gnu compiler collection)即编译套件,gcc 可以支持多种计算机体系结构,比如 X86、 ARM 、MIPI .我们使用的 ubuntu 默认自带的 gcc。

gcc 选项 文件名

-o 参数为指定生成文件的文件名

举例: gcc hello.c -o hello

如果我们不使用 -o 参数指定我们生成文件的名称,直接输入 gcc hello.c 编译完会得到一个 a.out 文件,执行这个 a.out 的结构和执行 hello 是一样的。

02  

file 命令:

功能:查看文件类型

格式: file 文件名

03  

编译流程

从 hello.c 编译得到 hello 或者 a.out 要经历四个步骤:预处理,编译,汇编,链接。

  • hello.i  预处理得到的 C 语言代码

  • hello.s  汇编语言文件

  • hello.o 目标文件

第一阶段预处理阶段,编译器会对头文件或者宏定义进行展开,或者条件编译的选择我们可以使用 -E 参数得到预处理文件

  • -E :只对文件进行预处理,不编译和链接。

使用 gcc -E hello.c -o hello.i 得到预处理后的文件,输入以下命令:

    gcc -E hello.c -o hello.i 

    第二阶段编译,把文件编译成汇编代码

    -S 参数 将 hello.i 文件编译成 hello.s 文件

      gcc -S hello.i -o hello.s

      第三阶段汇编,把汇编文件编译机器码

      -c 参数 可以把 hello.s 文件编译成 hello.o 文件

        gcc -c hello.s -o hello.o

        第四阶段:链接

        直接把目标文件编译成可执行文件

        链接分为静态链接和动态链接,gcc 默认的是动态链接

        特点:生成的程序下,但是需要依赖库,

        静态链接:使用 -static 参数就是静态链接,因为程序里面包含了需要的库,所以体积比较大,静态链接的可执行文件>动态链接的可执行文件

          gcc hello.o -o hello
            // 静态链接gcc hello.c -o hello1 -static
            

            http://www.dtcms.com/a/77752.html

            相关文章:

          • 从零构建大语言模型全栈开发指南:第一部分:数学与理论基础-1.1.2核心数学基础:线性代数、概率论与梯度优化
          • Blender制作次表面材质
          • python 函数入门指南
          • sql小记,20250319
          • Lombok常用注解
          • C语言每日一练——day_12(最后一天)
          • Java protected 关键字详解及探究过程(详细、准确)
          • 实验二 进程通信
          • CVPR2025 | AnyAttack:对任意图像的视觉语言模型的目标性对抗攻击
          • 实现拖拽图片验证的基本步骤
          • vulhub Matrix-Breakout
          • Ai知识库私有化部署
          • Android Launcher3 首屏图标锁定技术方案解析
          • What a code!
          • 网格交易中倍数委托的实现方法
          • 软考程序员考试知识点汇总
          • 华为ipd流程华为流程体系管理华为数字化转型流程数字化管理解决方案介绍81页精品PPT
          • 漏洞知识点《Tornado框架中RequestHandler的对象》
          • 英语词性--连词
          • Model Context Protocol - Prompts
          • 智慧楼宇:科技编织的未来生活图景
          • dart学习记录3(函数)
          • 三.ffmpeg对yuv的操作
          • SSH连接中断原因分析(SSH断开、SSH中断、SSH连接断开、远程断开、远程中断)(带宽不足、网络抖动与丢包、CPU资源耗尽、内存不足、磁盘I/O瓶颈)
          • 解锁物联网高效开发,Synaptics SYN43756E Wi-Fi 6E 芯片登场
          • 打造无缝智慧照明场景,涂鸦智能全新发布蓝牙Mesh照明解决方案
          • AI Agent系列(六) -基于ReAct架构搭建LLM Agent(Deepseek)
          • C语言中的函数
          • 动平衡仿真程序设计
          • SpringSecurity——如何获取当前登录用户的信息