linux汇编预处理,Linux程序在预处理、编译、汇编、链接、运行步骤的作用
创建一个hello.c文件,按步骤操作:
一、预编译
操作步骤:gcc -E hello.c -o hello.i
1.将所有的#define删除,并展开所有的宏定义;
2.处理所有的预编译指令,例如:#if,#elif,#else,#endif;
3.处理#include预编译指令,将被包含的文件插入到预编译指令的位置;
4.添加行号信息文件名信息,便于调试;
5.删除所有的注释:// /**/;
6.保留所有的#pragma编译指令,因为在编写程序的时候,我们经常要用到#pragma指令来设定编译器的状态或者是指示编译器完成一些特定的动作。
生成.i文件。
包括(1)去注释 (2)宏替换 (3)头文件展开 (4)条件编译
二、编译(高级语言——>汇编语言)
操作步骤:gcc -S hello.i -o hello.s
主要作用:1.扫描(词法分析),2.语法分析,3.语义分析,4.源代码优化(中间语言生成),5.代码生成,目标代码优化。
三、汇编(汇编语言——>二进制文件)
操作步骤:gcc -c hello.s -o hello.o
主要作用:汇编器是将汇编代码转变成可以执行的指令,生成 目标文件。
四、链接(生成exe文件)
操作步骤:gcc hello.o -o hello
主要作用:链接过程主要包括:地址和空间的分配,符号决议和重定位。
地址和空间:系统给函数、变量分配地址和空间。
符号决议:也可以说地址绑定,分动态链接和静态链接,
重定位:假设此时又两个文件:A,B。A需要B中的某个函数mov的地址,未链接前将地址置为0,当A与B链接后修改目标地址,完成重定位
五、运行
操作步骤:./hello
主要功能:运行程序
linux汇编预处理,Linux程序在预处理、编译、汇编、链接、运行步骤的作用相关推荐
- 编译+构建+链接+运行之间的关系分析
编译+构建+链接+运行之间的关系分析 源文件+编译+部署+测试+打包 Maven+default: 验证(validate)+编译(compile)+测试(test)+打包(package)+验证(v ...
- Linux程序在预处理、编译、汇编、链接、运行步骤的作用
创建一个hello.c文件,按步骤操作: 一.预编译 <生成 hello.i文件 > 操作步骤:gcc -E hello.c -o hello.i 1.将所有的#define删除,并展开所 ...
- 让C/C++程序一次编译,到处运行 (仅限Linux)
本文不考虑静态链接方式,很多库在静态链接的时候会有问题,比如libunwind,它的异常处理API会和gcc原有的冲突.还有一个显著的问题就是nss.它根据配置文件/etc/nsswitch.conf ...
- linux怎么用gcc运行程序设计,linux应用程序设计--GCC程序编译
GCC程序编译 linux系统下的GCC(GNU C Compiler)是GNU推出的功能强大.性能优越的多平台编译器,是GNU的代表作之一.GCC可以在多种硬件平台上编译出可执行程序,其执行效率与一 ...
- Linux自动发布Java程序脚本
Linux自动发布Java程序脚本 1. 编译脚本 2. 启动脚本 3. 停止脚本 4. 最终发布脚本 1. 编译脚本 #! /bin/bash time="`date +%Y%m%d-%H ...
- 【Qt开发】【VS开发】【Linux开发】OpenCV、Qt-MinGw、Qt-msvc、VS2010、VS2015、Ubuntu Linux、ARM Linux中几个特别容易混淆的内容...
[Qt开发][VS开发][Linux开发]OpenCV.Qt-MinGw.Qt-msvc.VS2010.VS2015.Ubuntu Linux.ARM Linux中几个特别容易混淆的内容 标签:[Qt ...
- linux中 pwd *****,linux命令自己写--pwd
其实这个命令不是非常常用的命令,至少对于我来说这个命令的使用频率不是那么的高.但是学习这个编写这个命令有助于了解文件系统的相关知识. 对于这个命令需要了解的重要知识点就是i-node. 首先从文件系统 ...
- 三,c程序的编辑,编译,链接和运行
一,程序设计的任务 使用计算机解决实际问题的过程一般由如下几个步骤组成: 1,分析问题.在着手解决问题之前,应该通过分析问题,充分的理解问题,确定问题的原始数据,解题步骤,需要输出的数据及形式等. 2 ...
- BootLoader、Linux Kernel(linux内核)、RootFile(根文件系统)
这3部分是怎么相互协作来构成这个系统的呢? 各自有什么用呢? 三者有什么联系? 怎么联系? 系统的执行流程又是怎么样的呢? 搞清楚这个问题你对整个系统的运行就很清楚了,对于下一步制作这个linux系统 ...
- c语言程序既可以编译执行也可以解释执行,2016年山东农业大学信息科学与工程学院C语言程序设计(同等学力加试)复试笔试仿真模拟题...
一.选择题 1. 计算机高级语言程序的运行方法有编译执行和解释执行两种,以下叙述中正确的是 ( ). A.C 语言程序仅可以编译执行 B.C 语言程序仅可以解释执行 C.C 语言程序既可以编译执行,又 ...
最新文章
- Intellij IDEA的下载和使用(针对学生的免费使用计划)
- 学习ASP.NET一定要学习ASP.NET AJAX吗?
- [BetterExplained]书写是为了更好的思考
- 数据结构计算机复试题,计算机考研数据结构测试题(四)
- Android 应用间的集成
- 大盘点|卷积神经网络必读的 100 篇经典论文,包含检测 / 识别 / 分类 / 分割多个领域
- 动手写了一个12306插件 chrome浏览器
- Python basestring函数- Python零基础入门教程
- js如何监听元素事件是否被移除_javascript – 如果一个DOM元素被删除,它的监听器也从内存中删除?...
- C#时间的味道——任时光匆匆我只在乎你
- JDBC调用存储过程,以及存储过程 事务的使用.....
- [转]安装 phpmyadmin 无法载入 mcrypt 扩展 Mcrypt库安装
- 源码编译安装screen
- Win11怎么设置鼠标箭头图案?Win11更换鼠标图案的方法
- 07.JavaScript弹窗——alert、prompt、confirm
- 强化学习论文分析3---蜂窝网络联合频谱和功率分配的深度强化学习--《Deep Reinforcement Learning for ......》
- 调度工具之Azkaban 介绍
- 复试21天Day 21
- 微信小程序 -- 真机调试时没问题,上线后无法访问服务器
- goldenDict有道地址
热门文章
- SQLite异常:unsafenativemethods.sqlite3_open_interop
- 【SpringBoot_ANNOTATIONS】组件注册 02 @ComponentScan 自动扫描组件 指定扫描规则
- mysql 导出中间 数据_mysql导出数据库几种方法
- unity-Profiler调试Android
- html表单php比较三个值大小,php比较多维数组中值的大小排...-array_filter()函数去掉多维数组...-php生成静态html文件的三种方法_169IT.COM...
- mac推箱子c语言,c语言写的推箱子源码,非常适合新手学习
- vue4 库模式打包_Steam“小模式”游戏库回归 界面轻快简洁可随时切换
- ideal 如何创建jsp页面_HQChart使用教程1- 如何快速创建一个K线图页面
- 测试一个链表是否为空表 C语言,【链表测试面试题】面试问题:C语言单链表的… - 看准网...
- [转]BAT 批处理脚本 教程