参考资料:

  https://blog.csdn.net/czg13548930186/article/details/78331692

一个C/C++文件要经过预处理(preprocessing)、编译(compilation)、汇编(assembly)、和连接(linking)才能变成可执行文件。

  以 hello.c为例,演示编译命令:
  gcc -E -o hello.i hello.c

  gcc -S -o hello.s hello.i

  gcc -c -o hello.o hello.s

  gcc -o hello hello.o

  

  gcc -c -o hello.o hello.c 不作最后一步链接,得到hello.o二进制OBJ文件

  gcc -v -o hello hello.o //查看详细的链接过程

  • crt1.o、crti.o、crtbegin.o、crtend.o、crtn.o是gcc加入的系统标准启动文件,对于一般应用程序,这些启动是必需的。
  • -lc:链接libc库文件,其中libc库文件中就实现了printf等函数。

  

  动态链接:

  默认使用动态链接:gcc -o hello_shared hello.o

  静态链接:

  gcc -static -o hello_static hello.o

  

  -nostartfiles

不链接系统标准启动文件,而标准库文件仍然正常使用:
gcc -v -nostartfiles -o hello hello.o

  -nostdlib(最常用

不链接系统标准启动文件和标准库文件:
gcc -v -nostdlib -o hello hello.o

- 会提示因为没有链接系统标准启动文件和标准库文件,而链接失败
- 这个-nostdlib选项常用于裸机/bootloader、linux内核等程序,因为它们不需要启动文件、标准库文件。

转载于:https://www.cnblogs.com/rivsidn/p/10522941.html

GCC编译的几个步骤相关推荐

  1. c语言编译四个步骤,gcc编译的四个步骤

    以最简单的hello.c为例子 一步到位:gcc hello.c 这条命令隐含执行了 (1)预处理 (2)编译 (3)汇编 (4)链接 这里未指定输出文件,默认输出为a.out gcc编译C源码有四个 ...

  2. linux下gcc编译的四个步骤,linux:gcc编译程序的四个阶段

    gcc的编译流程分为四个步骤,分别为: 预处理(Pre-Processing) 编译(Compiling) 汇编(Assembling) 链接(Linking) gcc指令的一般格式为:gcc [选项 ...

  3. GCC 编译 C++ 程序分步骤流程(预处理 gcc -E、编译 gcc -S、汇编 gcc -c 和链接 gcc 以及 gcc -o 选项)

    C 或者 C++ 程序从源代码生成可执行程序的过程,需经历 4 个过程,分别是预处理.编译.汇编和链接. 同样,使用 GCC 编译器编译 C 或者 C++ 程序,也必须要经历这 4 个过程.但考虑在实 ...

  4. 在Linux下gcc缺省编译,在Linux下用gcc编译hello world

    1. 确保Linux系统里已经装好了gcc 测试:输入gcc后是如下的结果就说明已经安装成功 2. 创建HelloWorld.c 使用 touch 创建一个空文件; 用vim编辑 按下A或者I 插入 ...

  5. VScode+gcc编译环境搭建

    VScode+gcc编译环境搭建 VScode下载 GCC安装 可能出现的问题 一些IDE集成开发环境占用内存大,体量大,比如Visual studio. Visual Studio Code (简称 ...

  6. linux下gcc编译c文件生成可执行文件的四个步骤

    Linux下gcc编译c文件为可执行文件分为四个步骤: 分别是 预编译.编译.汇编.链接. 1.预编译( 生成 hello.i 文件) 预编译的处理规则: 1. 将所有的 "#define& ...

  7. gcc编译c语言多线程程序的步骤,GCC分步骤编译C语言程序

    上节<GCC编译C语言程序完整演示>讲解的是通过gcc命令一次性完成编译和链接的整个过程,这样最方便,大家在学习C语言的过程中一般都这么做.实际上,gcc命令也可以将编译和链接分开,每次只 ...

  8. Linux中gcc编译步骤

    我们这里以C语言为例,看看C语言程序在Linux中编译执行的详细步骤 1.创建一个.c文件 2.写入一些简单的代码 我们使用gcc -E filename.c -o filename.i 命令对程序先 ...

  9. gcc编译工具的使用

    技术交流QQ群:1027579432,欢迎你的加入! 1.gcc工作流程 预处理:–E 宏替换 头文件展开 注释去掉 xxx.c文件变成xxx.i文件(实际上也是c文件) 编译(此步骤时间最长):–S ...

  10. 系统中编译安装ZLMediaKit的步骤

    这篇文章给大家分享的是centos6系统中编译安装ZLMediaKit的步骤.小编觉得挺实用的,因此分享给大家学习.如下资料是编译安装的步骤.  1.安装基础编译环境 1.1 gcc-5.4的安装  ...

最新文章

  1. 7个IntelliJ IDEA必备插件,提高编码效率
  2. mysql 查询条件优先级_mysql条件查询and or使用实例及优先级介绍
  3. 自己动手编写一个ajax extender
  4. python学习day2:类与对象
  5. 云服务器虚拟主机区别,云服务器和虚拟主机的区别
  6. linux 线程 waitforsingleobject,用Sleep或WaitForSingleObject实现线程的休眠 | 求索阁
  7. 解决scrapy不执行Request回调函数callback
  8. dubbo k8s 服务发现_将Dubbo微服务迁移到k8s集群环境中前的思考与落地
  9. 营销管理手册_某连锁动物医院营销管理咨询项目方案成功汇报
  10. php和gps终端设备通讯,运输车辆GPS定位+语音对讲通讯方案
  11. Web服务器基础详解
  12. 孙鑫MFC笔记之十六--Active控件
  13. 手机怎么用java9_java9_java9官方版 32位64位 最新版_天天下载手机版
  14. 如何将excel文件联系人转换成vcf文件
  15. 肾囊肿有什么症状呢?
  16. Java:通过读取文件头来得到文件真实类型
  17. Javascrit通过百度地图API获取客户端IP、地址
  18. VMware虚拟机安装Ubuntu kylin 麒麟系统教程 超详细
  19. Vmware安装Centos及Linux的介绍,命令
  20. Confluence 6 管理协同编辑 - 代理和 SSL 的考虑

热门文章

  1. 利用JQuery在动态页面的倒计时器
  2. 浏览器的不兼容,归纳几点html编码要素
  3. VS2005无法打开网站
  4. 今天闲来无事,做了个简易的ORM 感觉有点像ActiveRecord作业风格,又有点像iBatis...
  5. php与XML、XSLT、Mysql的结合运用 (转载)
  6. 【IJCAI2021】长文本知识抽取:基于语义分割的文档级三元组关系抽取
  7. 【收藏】一份最新的、全面的NLP文本分类综述
  8. 【知识图谱】知识图谱嵌入模型简介
  9. 【清华ACL2020长文】KdConv:多领域知识驱动的中文多轮对话数据集
  10. 详解机器学习之感知机理论与实践