首页 > 其他分享 >gcc编译过程总结

gcc编译过程总结

时间:2023-10-10 17:59:23浏览次数:36  
标签:总结 汇编 gcc 文件 指定 编译 test

第一步: 对源文件进行预处理, 需要使用的gcc参数为 -E

# 1. 预处理, -o 指定生成的文件名
$ gcc -E test.c -o test.i

第二步: 编译预处理之后的文件, 需要使用的gcc参数为 -S

# 2. 编译, 得到汇编文件
$ gcc -S test.i -o test.s

第三步: 对得到的汇编文件进行汇编, 需要使用的gcc参数为-c

# 3. 汇编
$ gcc -c test.s -o test.o

第四步: 将得到的二进制文件和标准库进制链接, 得到可执行的二进制文件, 不需要任何参数

# 4. 链接
$ gcc test.o -o test

注意: 在使用gcc编译程序的时候指定-o或-c会自动执行几个步骤

 gcc常用参数-E 预处理指定的源文件,不进行编译

-S    编译指定的源文件,但是不进行汇编
-c    编译、汇编指定的源文件,但是不进行链接
-o [file1] [file2] / [file2] -o [file1]    将文件 file2 编译成文件 file1
-I directory (大写的i)    指定 include 包含文件的搜索目录
-g    在编译的时候,生成调试信息,该程序可以被调试器调试
-D    在程序编译的时候,指定一个宏
-w    不生成任何警告信息, 不建议使用, 有些时候警告就是错误
-Wall    生成所有警告信息
-On    n的取值范围:0~3。编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高
-l    在程序编译的时候,指定使用的库
-L    指定编译的时候,搜索的库的路径。
-fPIC/fpic    生成与位置无

-D参数实例

int main()
{
int a = 10;
#ifdef DEBUG
printf("这是调试代码\n");
#endif
printf("这是发布代码\n");
}

# 在编译命令中定义这个DEBUG 宏,
$ gcc test.c -o app -D DEBUG

执行后的输出结果:这是调试代码

 

 

标签:总结,汇编,gcc,文件,指定,编译,test
From: https://www.cnblogs.com/ddrm/p/17755324.html

相关文章

  • 总结selenium 中 js 更改隐藏属性
    第一种多个元素被隐藏时通过js修改对比照片这个是没隐藏的 对比照片 这个是隐藏的 driver=webdriver.Chrome()#urlurl=r"http://127.0.0.1:5000/"driver.get(url)print("已打开网页")#执行js脚本,将元素的display属性设置为block,......
  • Android Studio可以编译但Flutter提示无法定位java runtime
    AndroidStudio可以编译但Flutter提示无法定位javaruntime下面我们重点讲一下“UnabletofindbundledJavaversion”报错问题到AndroidStudio安装目录下注意:有些AndroidStudio可能是“jbr”文件,不用管jbr文件,直接复制一份jbr文件在同一路经,再把复制的文件改名为“jre”文......
  • Thingsboard网关总结
    1概述Thingsboard网关是一个开放源代码的解决方案可让您使用Thingsboard集成连接到旧系统和第三方系统的设备。运行需要python3.7+的环境。2安装一般使用源码进行安装,其步骤如下:1、从代码仓库克隆代码, 2、进入代码目录,使用setup.py脚本安装python模块,python3setup.pyinsta......
  • Windows下Cmake编译Poco库
    C++Windows下使用Cmake编译Poco库1.编译前准备:先配置OpenSSL环境(opensslversion-a查看)如果openssl是1.0.*版本,Poco版本最高用1.9.4。如果1.1或者更高,用最新版本。2.编译命令(演示使用VS2022编译v140版本Win32的库):cd..mkdircmake_build_x86cdcmake......
  • Jenkins 配置MAC节点,编译iOS项目
     文章主要介绍Jenkins主从节点配置,mac机配置slave节点。从机已经搭建android和ios编译环境为例,介绍Jenkins节点配置。环境介绍主机环境介绍:主机Jenkins运行在tomcat中。Jenkins本身安装的环境仅包括java环境和gradle环境。#setjavaenvironmentexportJAVA_HOME=/usr......
  • tinyalsa的交叉编译
    国内的git源https://gitee.com/mirrors_tinyalsa/tinyalsa 编译:修改MakefileexportPREFIX?=/usr/local/tinyalsa/exportCROSS_COMPILE:=arm-linux-gnueabihf-makesudomakeinstall ......
  • 10月9日总结
    一.今天做了什么上午上工程实训课,老师先讲了许多铁道的知识,接着讲解了如何为高铁办理发车,和如何开高铁。然后我们就实际上手操作。这节课收获很多。下午上java课,写数据库,感觉很难好在最后写出来了,以后有时间写个教程。二.遇到的问题,如何解决无......
  • phpStrom配置sass编译和JS压缩混淆
    1JS压缩混淆(YUICompressor)1.1安装java文件(jre-8u201-windows-x64.exe)1.2YUICompressor下载https://github.com/yui/yuicompressor/releases1.3Phpstrom配置:设置-工具-filewatcher配置YUICompressor参数Program参数:D:\MyLocalSoftWare\compressTool\java\bin\jav......
  • 编译型编程语言与解释型编程语言的区别
    我们先看编译型,其实它和汇编语言是一样的:也是有一个负责翻译的程序来对我们的源代码进行转换,生成相对应的可执行代码。这个过程说得专业一点,就称为编译(Compile),而负责编译的程序自然就称为编译器(Compiler)。如果我们写的程序代码都包含在一个源文件中,那么通常编译之后就会直接生成一......
  • STL总结
       STL(StandardTemplateLibrary)里有很多组成部分,但是主要有三个,容器、迭代器和算法   容器用来管理某个特定对象的集合。每一种容器都有自己的优点和缺点,在项目中根据不同的需求,使用不同的容器。容器可以是数组、链表或者类字典。   迭代器用于遍历对象集合的元素......