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

Linux(1)编译链接和gcc

1、gcc分布编译链接

(1)预编译

gcc -E main.c -o main.i

(2)编译

gcc -S main.i -o main.s

(3)汇编

gcc -c main.s -o main.o

(4)链接

gcc main.o -o main

执行:./main

或者:全路径/main

2、编译链接过程

从源文件main.c开始——>预编译阶段(主要作用:处理预编译指令 和 删除注释)

——>编译阶段(主要作用:语法词法分析 优化代码 和 符号汇总)

——>汇编阶段(主要作用:翻译成二进制 生成各个段 和 生成符号表)

——>链接阶段(主要作用:合并各个段 符号解析 和 符号重定位)

——>.exe  a.out 

编译链接原理:

main.c通过预编译生成main.i文件

main.i通过编译生成main.s文件

main.s通过汇编生成main.o文件(可重定位的二进制目标文件)

链接阶段就是将所有的.o文件,.a文件(静态库文件),.lib文件,.obj文件链接起来,生成.out文件(ELF格式的可执行文件)(Windows是生成.exe文件)

预编译生成.i文件(第一步),编译生成.s文件(第二步),即编译生成汇编指令 然后接下来 是汇编,对汇编指令进行汇编,生成.o文件(第三步),也就是变成二进制指令,最后就是链接(第四步)

(1)预编译阶段

a)删除所有的“#define”,并且展开所有的宏定义;

b)处理所有的条件预编译指令,“#if”,“#ifdef”,“#endif”等;

c)处理“#include”预编译指令,将所有被包含的文件插入到该预编译指令的位置

d)删除所有的注释行

e)添加行号和文件号标识,以便于编译器产生调试用的符号信息及编译时产生编译错误和警告时显示行号;

f)保留所有的#pragma编译器指令,因为编译器需要使用它们

(2)编译阶段

语法分析,语法分析,语义分析,代码优化,汇总符号

(3)汇编阶段

将汇编指令翻译成二进制格式,生成各个section,生成符号表

(4)链接阶段

1)合并各个section,调整section的起始位移和段大小,合并符号表,进行符号解析,给符号分配虚拟地址;

2)符号重定位,即在使用符号的地方全部替换成符号的虚拟地址;

3、执行

路径+可执行文件名

两步:gcc -c main.c -o main.o 或者 gcc -c main.c

           gcc -o main main.o                     gcc -o main main.c/main.o

一步:gcc -o main main.c

./main


http://www.xdnf.cn/news/5995.html

相关文章:

  • typedef unsigned short uint16_t; typedef unsigned int uint32_t;
  • Lin4neuro 系统详解
  • Qt应用程序启动时的一些思路:从单实例到性能优化的处理方案
  • zabbix最新版本7.2超级详细安装部署(一)
  • VS Code怎么设置python SDK路径
  • 理解计算机系统_并发编程(5)_基于线程的并发(二):线程api和基于线程的并发服务器
  • Ascend的aclgraph(六)AclConcreteGraph
  • 技术并不能产生一个好的产品
  • solidwors插件 开发————仙盟创梦IDE
  • # YOLOv3:基于 PyTorch 的目标检测模型实现
  • 2.7/Q2,Charls最新文章解读
  • 北三短报文数传终端:筑牢水利防汛“智慧防线”,守护江河安澜
  • 构建你的第一个简单AI助手 - 入门实践
  • LangSmith 基本使用教程
  • 大疆无人机
  • 黑马k8s(五)
  • 面试题总结
  • 实景三维建模软件应用场景(众趣科技实景三维建模)
  • HarmonyOS NEXT应用开发-Notification Kit(用户通知服务)notificationManager.getSlots
  • SEO职业市场正在经历重大变革吗?2025年趋势与应对策略
  • Qt在统信UOS及银河麒麟Kylin系统中进行软件开发的环境配置,打包发布和注意事项
  • P2758 编辑距离
  • 深入理解 OAuth 2.0:技术核心与实战场景
  • java数组题(5)
  • 考研复习全年规划
  • 爬虫Incapsula reese84加密案例:Etihad航空(纯算法)
  • xss-labs靶场基础8-10关(记录学习)
  • 多线程进阶核心知识详解(通俗版)
  • Python+Streamlit实现登录页
  • python-pyqt6框架工具开发总结