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

1.3 编译程序:单个C文件和多个C文件

一、编译单个C文件

1.1 源码准备

hello.c 代码:

#include <stdio.h>
int main()
{printf("hello ffmpeg \r\n");return 0;
}

1.2 编译阶段

gcc -c -o hello.o hello.c

gcc 的语法规则:

  • -c 是指只编译程序,不进行链接
  • -o 是指定输出文件名
  • 输入文件:如果一个参数前面什么也没有,则该参数是输入参数
  • 参数顺序没有要求

在这里插入图片描述

分析hello.o文件

  • 目标文件hello.o是ELF格式的文件,包含hello.c的字节码
  • 里面调用的外部函数地址是00占位符,链接时才修正。
    在这里插入图片描述

1.3 链接阶段

gcc -o hello hello.o

在这里插入图片描述

分析hello程序:objdump -d hello
在这里插入图片描述

二、编译多个C文件

2.1 源码准备

源码结构:

laow@m-pc:~/Desktop/cpp/universe$ tree ./
./
├── earth.c
├── earth.h
├── moon.c
├── moon.h
├── sun.c
├── sun.h
└── zeus.c

下载地址:universe.zip

2.2 编译阶段

gcc -c -o zeus.o zeus.c
gcc -c -o sun.o sun.c
gcc -c -o moon.o moon.c
gcc -c -o earth.o earth.c

gcc 编译的时候实际上都是单文件编译
在这里插入图片描述

编译阶段不需要知道 依赖函数的具体实现
在这里插入图片描述

2.3 链接阶段

gcc -o zeus zeus.o sun.o moon.o earth.o

在这里插入图片描述

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

相关文章:

  • 编译构建C++程序时ABI一致性问题
  • Java设计模式之状态模式详解
  • Unity基础-数学向量
  • NY118NY120美光固态闪存NY124NY129
  • 高股息打底+政策催化增强+永续经营兜底
  • 每日算法 -【Swift 算法】电话号码字母组合
  • CSS6404L 在物联网设备中的应用优势:低功耗高可靠的存储革新与竞品对比
  • 本机无法远程别的计算机的方法
  • MySQL查询语句(续)
  • C++.OpenGL (1/64) 创建窗口(Hello Window)
  • python八股文算法:三数之和
  • GIT(AI回答)
  • JS面试常见问题——数据类型篇
  • 传输层:udp与tcp协议
  • 【递归、搜索与回溯】专题三 穷举vs暴搜vs回溯vs剪枝
  • Python获取网易云音乐的评论
  • Java-前置基础
  • Kafka 入门指南与一键部署
  • S5P6818_驱动篇(24)UART驱动
  • IoT/HCIP实验-4/单片机基础实验(LCD/LED/按键操作/GPIO/EXTI中断服务)
  • untiy 模拟人物在街道走路和跑步
  • Java中==和equals的区别
  • 理解JavaScript中map和parseInt的陷阱:一个常见的面试题解析
  • sklearn 和 pytorch tensorflow什么关系
  • 12.vite,webpack构建工具
  • 【Linux 学习计划】-- 简易版shell编写
  • 刷题记录(7)二叉树
  • 六、【ESP32开发全栈指南:深入解析ESP32 IDF中的WiFi AP模式开发】
  • 欧拉定理和费马定理
  • Gerrit+repo管理git仓库,如果本地有新分支不能执行repo sync来同步远程所有修改,会报错