Linux 系统上 C 程序的编译与调试 2 总结

news2024/11/29 3:41:19

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

gcc -E hello.c -o hello.i #预处理
gcc -S hello.i -o hello.s #编译
gcc -c hello.s -o hello.o #汇编
gcc hello.o -o hello #链接
gcc hello.c -o hello #直接编译链接成可执行目标文件
gcc -c hello.c 或 gcc -c hello.c -o hello.o #编译生成可重定位目标文件

 (1) 预编译 :
gcc -E main.c -o main.i

wys@DESKTOP-2OU3HRV:~/mycode$ ls
main.c
wys@DESKTOP-2OU3HRV:~/mycode$ cat mian.c
cat: mian.c: No such file or directory
wys@DESKTOP-2OU3HRV:~/mycode$ ls
main.c
wys@DESKTOP-2OU3HRV:~/mycode$ cat main.c
#include<stdio.h>
int main()
{
    printf("hello world\n");
    return 0;
}
wys@DESKTOP-2OU3HRV:~/mycode$ gcc -E main.c -o main.i
wys@DESKTOP-2OU3HRV:~/mycode$ ls
main.c  main.i
wys@DESKTOP-2OU3HRV:~/mycode$

 

 (2) 编译:
gcc -S main.i -o main.s

wys@DESKTOP-2OU3HRV:~/mycode$ ls
main.c  main.i
wys@DESKTOP-2OU3HRV:~/mycode$ gcc -S main.i -o main.s
wys@DESKTOP-2OU3HRV:~/mycode$ ls
main.c  main.i  main.s
wys@DESKTOP-2OU3HRV:~/mycode$

 

 (3) 汇编:
gcc -c main.s -o main.o

wys@DESKTOP-2OU3HRV:~/mycode$ ls
main.c  main.i  main.s
wys@DESKTOP-2OU3HRV:~/mycode$ gcc -c main.s -o main.o
wys@DESKTOP-2OU3HRV:~/mycode$ ls
main.c  main.i  main.o  main.s 

 (4) 链接:
gcc main.o -o main

wys@DESKTOP-2OU3HRV:~/mycode$ ls
main.c  main.i  main.o  main.s
wys@DESKTOP-2OU3HRV:~/mycode$ vi main.o
wys@DESKTOP-2OU3HRV:~/mycode$ gcc main.o -o main
wys@DESKTOP-2OU3HRV:~/mycode$ ls
main  main.c  main.i  main.o  main.s
wys@DESKTOP-2OU3HRV:~/mycode$

 一步完成

wys@DESKTOP-2OU3HRV:~/mycode$ ls
main.c
wys@DESKTOP-2OU3HRV:~/mycode$ gcc -o main main.c
wys@DESKTOP-2OU3HRV:~/mycode$ ls
main  main.c
wys@DESKTOP-2OU3HRV:~/mycode$ ./main
hello world
wys@DESKTOP-2OU3HRV:~/mycode$

 两步完成

wys@DESKTOP-2OU3HRV:~/mycode$ ls
main.c
wys@DESKTOP-2OU3HRV:~/mycode$ gcc -c main.c -o main.o
wys@DESKTOP-2OU3HRV:~/mycode$ ls
main.c  main.o
wys@DESKTOP-2OU3HRV:~/mycode$ gcc -o main main.o
wys@DESKTOP-2OU3HRV:~/mycode$ ls
main  main.c  main.o
wys@DESKTOP-2OU3HRV:~/mycode$ ./main
hello world
wys@DESKTOP-2OU3HRV:~/mycode$

 main.c

 2.编译链接过程

1.预编译阶段

a) 删除所有的“#define”,并且展开所有的宏定义;
b) 处理所有的条件预编译指令,“#if”、“#ifdef”、“#endif”等;
c) 处理“#include”预编译指令,将被包含的文件插入到该预编译指令的位置;
d) 删除所有的注释;
e) 添加行号和文件名标识,以便于编译器产生调试用的符号信息及编译时产生编译错
误和警告时显示行号;
f) 保留所有的#pragma 编译器指令,因为编译器需要使用它们

2. 编译阶段

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

3.汇编阶段

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

4.链接阶段

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


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/528362.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【FMC134】ADC12DJ3200之4通道3.2GSPS(2 通道6.4GSPS) 12 位AD高速采集子卡设计原理图及调试经验

板卡概述 FMC134 是一款4 通道3.2GSPS&#xff08;或者配置成2 通道6.4GSPS&#xff09;采样率的12 位AD 采集FMC子卡模块&#xff0c;该板卡为FMC标准&#xff0c;符合VITA57.4 规范&#xff0c;可以作为一个理想的IO 模块耦合至FPGA 前端&#xff0c;射频模拟信号数字化后通过…

【多线程进阶一】常见的锁策略

目录 一、常见的锁策略 &#x1f345;1、常见的锁策略 &#x1f345;2、Synchronized实现了哪些锁策略&#xff1f; &#x1f345;3、自旋锁的实现方式—CAS &#xff08;1&#xff09;CAS伪代码 &#xff08;2&#xff09;演示 使用CAS方式来实现自增操作&#xff1a; &am…

Linux 系统修改环境变量的方法

1. Linux 系统修改环境变量 正常情况下改变环境变量可以修改的文件有两类&#xff1a; 第一类是 “系统的全局环境变量”&#xff0c;修改之后可作用于整个系统包含的所有用户都会生效&#xff1b;(文件&#xff1a;/etc/profile) 第二类是 “局部环境变量”&#xff0c;也就…

Linux C程序多文件编译

C程序多文件编译 在Linux平台C编程&#xff0c;实现求两数最大值和两数之和的功能 1.编写add.c wysDESKTOP-2OU3HRV:~/mycode/day02$ vi add.c1 int add(int x,int y)2 {3 return x y;4 } 2.编写头文件add.h wysDESKTOP-2OU3HRV:~/mycode/day02$ vi add.hint add(…

Python 实验五 字符串与正则表达式

1.输入一个字符串&#xff0c;将该字符串中下标为偶数的字符组成新串并通过字符串格式化方式显示。 a input("请输入一个字符串&#xff1a;") b a[1::2] print("老串为&#xff1a;%a&#xff0c;新串为&#xff1a;%a"%(a,b))2.编写程序&#xff0c;生…

LInux系统下使用git的三板斧以及报错处理

LInux使用git 我们应该知道git是什么东西&#xff0c;还有git的三板斧&#xff0c;git是一个工具&#xff0c;使用git来将文件上传到代码仓库 文章目录 LInux使用gitcloneaddcommitpush查看当前git的状态 clone 第一步找到你创建的仓库&#xff0c;然后复制http地址&#xf…

目前可以用的ChatGPT网址大全

ChatGPT是一个基于人工智能的聊天机器人&#xff0c;可以与用户进行自然语言交互。它可以回答各种问题&#xff0c;提供有用的信息和建议&#xff0c;还可以进行闲聊和娱乐。ChatGPT使用最先进的自然语言处理技术&#xff0c;可以理解和解释人类语言&#xff0c;从而提供准确和…

【Linux】IO多路转接 - epoll

文章目录 I/O多路转接之epollepoll初识epoll的相关系统调用函数epoll_createepoll_ctlepoll_wait epoll工作原理epoll服务器-*epoll的优缺点epoll工作方式对比LT和ET I/O多路转接之epoll epoll初识 epoll也是系统提供的一个多路转接的接口,epoll才是使用和面试的重点,在效率和…

SpringBoot【开发实用篇】---- 整合第三方技术(缓存)

SpringBoot【开发实用篇】---- 整合第三方技术&#xff08;缓存&#xff09; SpringBoot内置缓存解决方案手机验证码案例SpringBoot整合Ehcache缓存SpringBoot整合Redis缓存SpringBoot整合Memcached缓存SpringBoot整合jetcache缓存纯远程方案纯本地方案本地远程方案远程方案的数…

tomcat控制台打印乱码解决

一、注册表修改 HKEY_CURRENT_USER ->console ->tomcate 新增 32位 CodePage 16进制 fde9 二、idea 中配置 Tomcat 后启动服务&#xff0c;输出打印日志乱码问题 解决办法&#xff1a; ①、打开安装idea文件路径&#xff0c;在bin目录下&#xff0c;找到下面两个文件 ②…

图像动态裁剪

1. 背景 以两级级联模型为例&#xff0c;第一级目标检测模型用于检测人员&#xff0c;第二级目标检测模型用于检测手机、对讲机等。然后实际数据采集过程中&#xff0c;手机、对讲机这些设备并不在人员的一级检测框内&#xff0c;使得二级模型训练的样本较少。 二级目标检测模…

详细讲解,接口自动化—Requests之Cookie鉴权关联接口实战

目录 前言&#xff1a; 一、 简介 二、 实战操作 1. 登录接口 2. 查询订单接口 3. 新增订单接口 4. 修改订单接口 5. 删除订单接口 三、 结束语 前言&#xff1a; 接口自动化测试是软件测试过程中的重要一环&#xff0c;现在越来越多的公司开始使用自动化测试来提高测…

Gigabyte Z490 Vision D i9-10900k电脑 Hackintosh 黑苹果efi引导文件

原文来源于黑果魏叔官网&#xff0c;转载需注明出处。&#xff08;下载请直接百度黑果魏叔&#xff09; 硬件型号驱动情况 主板Gigabyte Z490 Vision D 处理器Intel i9-10900k已驱动 内存64GB G.Skill Trident Z 3600Mhz CL18已驱动 硬盘西数 WDS250G3X0C-00SJG0 ( SN750) …

cad文件怎么转换成pdf格式?一键操作的4个方法

在很多时候&#xff0c;我们为了能够更好地查看CAD图纸&#xff0c;需要将其格式转换为PDF。所以说&#xff0c;CAD文件格式的转换是非常关键的。首先&#xff0c;将CAD转换为PDF格式能够有效提升文件的兼容性。CAD软件通常需要特定的软件才能打开和编辑&#xff0c;而PDF格式则…

Python Scrapy爬虫框架安装和创建

1、检查Win环境 python版本 python 2、whl方式安装 twisted twisted异步网络框架&#xff0c;可加快下载速度。优点是用少量的代码实现快速的抓取。 由于scrapy需要twisted的环境&#xff0c;我们直接去下载whl文件根据自己的Python版本选择 https://www.lfd.uci.edu/~gohlke/p…

由浅入深理解java集合(五)——集合 Map

HashMap 前面已经介绍完了Collection接口下的集合实现类&#xff0c;今天我们来介绍Map接口下的两个重要的集合实现类HashMap,TreeMap。 HashMap 是一个散列表&#xff0c;它存储的内容是键值对(key-value)映射。 既然要介绍HashMap&#xff0c;那么就顺带介绍HashTable,两者进…

【UE4】部署像素流

目录 一、单实例本地像素流送 步骤 1. 勾选插件 2. 打包工程并启动信令服务器 3. 创建快捷方式并启动游戏 二、单实例局域网像素流送 步骤 1. 编辑cirrus.js 2. 编辑快捷方式属性 3. 启动 一、单实例本地像素流送 步骤 1. 勾选插件 勾选使用“Pixel Streaming”插件&…

瑞吉外卖 - 新增员工功能(6)

某马瑞吉外卖单体架构项目完整开发文档&#xff0c;基于 Spring Boot 2.7.11 JDK 11。预计 5 月 20 日前更新完成&#xff0c;有需要的胖友记得一键三连&#xff0c;关注主页 “瑞吉外卖” 专栏获取最新文章。 相关资料&#xff1a;https://pan.baidu.com/s/1rO1Vytcp67mcw-PD…

智慧水务管控一体化平台,实现水务数字化管理

平台概述 柳林智慧水务管控一体化平台是以物联感知技术、大数据、智能控制、云计算、人工智能、数字孪生、AI算法、虚拟现实技术为核心&#xff0c;以监测仪表、通讯网络、数据库系统、数据中台、模型软件、前台展示、智慧运维等产品体系为支撑&#xff0c;以城市水资源、水生…

ArcSWAT报错:数据集未投影;Dataset must have a projected coordinate system

文章目录 1 报错内容2 定义投影3 重新执行ArcSWAT相关步骤 1 报错内容 Dataset must have a projected coordinate system. The current coordinate system is geographic . Please define a projected coordinate system for your DEM dataset using ArcToolbox before procee…