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

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.xdnf.cn/news/12454.html

相关文章:

  • Python打卡DAY46
  • JSON解析崩溃原因及解决方案
  • linux系统dd 工具介绍
  • 理解JavaScript中map和parseInt的陷阱:一个常见的面试题解析
  • win10+TensorRT+OpenCV+Qt+YOLOV8模型部署教程
  • 2025年多层PCB技术发展与厂商实践指南
  • C++总复习
  • 嵌入式学习笔记 - FreeRTOS 信号量以及释放函数
  • cursor和windsurf使用体验对比
  • NLP学习路线图(二十八):BERT及其变体
  • AI for Science(AI4S)的现在与未来,科学智能如何赋能科学研究?
  • Python训练营打卡Day46(2025.6.6)
  • leetcode 2434. 使用机器人打印字典序最小的字符串 中等
  • SpringCloud学习笔记-2
  • 【idea】分享一个关于Maven依赖管理好用的插件
  • 【redis实战篇】第八天
  • pyinstaller打包遇到报错,和pathlib冲突
  • KAG与RAG在医疗人工智能系统中的多维对比分析
  • Python读取阿里法拍网的html+解决登录cookie
  • 第四讲:类和对象(下)
  • 视觉SLAM基础补盲
  • git提交代码和解决冲突修复bug
  • MongoDB学习和应用(高效的非关系型数据库)
  • 【iOS安全】iPhone X iOS 16.7.11 (20H360) WinRa1n 越狱教程
  • 使用 Windows 完成 iOS 应用上架:Appuploader对比其他证书与上传方案
  • 在Linux查看电脑的GPU型号
  • 【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
  • 超构光学与 AR 的深度融合 | 攻克 VAC 与眼动范围难题
  • DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
  • 完美搭建appium自动化环境