创建一个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程序在预处理、编译、汇编、链接、运行步骤的作用相关推荐

  1. 编译+构建+链接+运行之间的关系分析

    编译+构建+链接+运行之间的关系分析 源文件+编译+部署+测试+打包 Maven+default: 验证(validate)+编译(compile)+测试(test)+打包(package)+验证(v ...

  2. Linux程序在预处理、编译、汇编、链接、运行步骤的作用

    创建一个hello.c文件,按步骤操作: 一.预编译 <生成 hello.i文件 > 操作步骤:gcc -E hello.c -o hello.i 1.将所有的#define删除,并展开所 ...

  3. 让C/C++程序一次编译,到处运行 (仅限Linux)

    本文不考虑静态链接方式,很多库在静态链接的时候会有问题,比如libunwind,它的异常处理API会和gcc原有的冲突.还有一个显著的问题就是nss.它根据配置文件/etc/nsswitch.conf ...

  4. linux怎么用gcc运行程序设计,linux应用程序设计--GCC程序编译

    GCC程序编译 linux系统下的GCC(GNU C Compiler)是GNU推出的功能强大.性能优越的多平台编译器,是GNU的代表作之一.GCC可以在多种硬件平台上编译出可执行程序,其执行效率与一 ...

  5. Linux自动发布Java程序脚本

    Linux自动发布Java程序脚本 1. 编译脚本 2. 启动脚本 3. 停止脚本 4. 最终发布脚本 1. 编译脚本 #! /bin/bash time="`date +%Y%m%d-%H ...

  6. 【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 ...

  7. linux中 pwd *****,linux命令自己写--pwd

    其实这个命令不是非常常用的命令,至少对于我来说这个命令的使用频率不是那么的高.但是学习这个编写这个命令有助于了解文件系统的相关知识. 对于这个命令需要了解的重要知识点就是i-node. 首先从文件系统 ...

  8. 三,c程序的编辑,编译,链接和运行

    一,程序设计的任务 使用计算机解决实际问题的过程一般由如下几个步骤组成: 1,分析问题.在着手解决问题之前,应该通过分析问题,充分的理解问题,确定问题的原始数据,解题步骤,需要输出的数据及形式等. 2 ...

  9. BootLoader、Linux Kernel(linux内核)、RootFile(根文件系统)

    这3部分是怎么相互协作来构成这个系统的呢? 各自有什么用呢? 三者有什么联系? 怎么联系? 系统的执行流程又是怎么样的呢? 搞清楚这个问题你对整个系统的运行就很清楚了,对于下一步制作这个linux系统 ...

  10. c语言程序既可以编译执行也可以解释执行,2016年山东农业大学信息科学与工程学院C语言程序设计(同等学力加试)复试笔试仿真模拟题...

    一.选择题 1. 计算机高级语言程序的运行方法有编译执行和解释执行两种,以下叙述中正确的是 ( ). A.C 语言程序仅可以编译执行 B.C 语言程序仅可以解释执行 C.C 语言程序既可以编译执行,又 ...

最新文章

  1. Intellij IDEA的下载和使用(针对学生的免费使用计划)
  2. 学习ASP.NET一定要学习ASP.NET AJAX吗?
  3. [BetterExplained]书写是为了更好的思考
  4. 数据结构计算机复试题,计算机考研数据结构测试题(四)
  5. Android 应用间的集成
  6. 大盘点|卷积神经网络必读的 100 篇经典论文,包含检测 / 识别 / 分类 / 分割多个领域
  7. 动手写了一个12306插件 chrome浏览器
  8. Python basestring函数- Python零基础入门教程
  9. js如何监听元素事件是否被移除_javascript – 如果一个DOM元素被删除,它的监听器也从内存中删除?...
  10. C#时间的味道——任时光匆匆我只在乎你
  11. JDBC调用存储过程,以及存储过程 事务的使用.....
  12. [转]安装 phpmyadmin 无法载入 mcrypt 扩展 Mcrypt库安装
  13. 源码编译安装screen
  14. Win11怎么设置鼠标箭头图案?Win11更换鼠标图案的方法
  15. 07.JavaScript弹窗——alert、prompt、confirm
  16. 强化学习论文分析3---蜂窝网络联合频谱和功率分配的深度强化学习--《Deep Reinforcement Learning for ......》
  17. 调度工具之Azkaban 介绍
  18. 复试21天Day 21
  19. 微信小程序 -- 真机调试时没问题,上线后无法访问服务器
  20. goldenDict有道地址

热门文章

  1. SQLite异常:unsafenativemethods.sqlite3_open_interop
  2. 【SpringBoot_ANNOTATIONS】组件注册 02 @ComponentScan 自动扫描组件 指定扫描规则
  3. mysql 导出中间 数据_mysql导出数据库几种方法
  4. unity-Profiler调试Android
  5. html表单php比较三个值大小,php比较多维数组中值的大小排...-array_filter()函数去掉多维数组...-php生成静态html文件的三种方法_169IT.COM...
  6. mac推箱子c语言,c语言写的推箱子源码,非常适合新手学习
  7. vue4 库模式打包_Steam“小模式”游戏库回归 界面轻快简洁可随时切换
  8. ideal 如何创建jsp页面_HQChart使用教程1- 如何快速创建一个K线图页面
  9. 测试一个链表是否为空表 C语言,【链表测试面试题】面试问题:C语言单链表的… - 看准网...
  10. [转]BAT 批处理脚本 教程