GCC编译的几个步骤
参考资料:
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编译的几个步骤相关推荐
- c语言编译四个步骤,gcc编译的四个步骤
以最简单的hello.c为例子 一步到位:gcc hello.c 这条命令隐含执行了 (1)预处理 (2)编译 (3)汇编 (4)链接 这里未指定输出文件,默认输出为a.out gcc编译C源码有四个 ...
- linux下gcc编译的四个步骤,linux:gcc编译程序的四个阶段
gcc的编译流程分为四个步骤,分别为: 预处理(Pre-Processing) 编译(Compiling) 汇编(Assembling) 链接(Linking) gcc指令的一般格式为:gcc [选项 ...
- GCC 编译 C++ 程序分步骤流程(预处理 gcc -E、编译 gcc -S、汇编 gcc -c 和链接 gcc 以及 gcc -o 选项)
C 或者 C++ 程序从源代码生成可执行程序的过程,需经历 4 个过程,分别是预处理.编译.汇编和链接. 同样,使用 GCC 编译器编译 C 或者 C++ 程序,也必须要经历这 4 个过程.但考虑在实 ...
- 在Linux下gcc缺省编译,在Linux下用gcc编译hello world
1. 确保Linux系统里已经装好了gcc 测试:输入gcc后是如下的结果就说明已经安装成功 2. 创建HelloWorld.c 使用 touch 创建一个空文件; 用vim编辑 按下A或者I 插入 ...
- VScode+gcc编译环境搭建
VScode+gcc编译环境搭建 VScode下载 GCC安装 可能出现的问题 一些IDE集成开发环境占用内存大,体量大,比如Visual studio. Visual Studio Code (简称 ...
- linux下gcc编译c文件生成可执行文件的四个步骤
Linux下gcc编译c文件为可执行文件分为四个步骤: 分别是 预编译.编译.汇编.链接. 1.预编译( 生成 hello.i 文件) 预编译的处理规则: 1. 将所有的 "#define& ...
- gcc编译c语言多线程程序的步骤,GCC分步骤编译C语言程序
上节<GCC编译C语言程序完整演示>讲解的是通过gcc命令一次性完成编译和链接的整个过程,这样最方便,大家在学习C语言的过程中一般都这么做.实际上,gcc命令也可以将编译和链接分开,每次只 ...
- Linux中gcc编译步骤
我们这里以C语言为例,看看C语言程序在Linux中编译执行的详细步骤 1.创建一个.c文件 2.写入一些简单的代码 我们使用gcc -E filename.c -o filename.i 命令对程序先 ...
- gcc编译工具的使用
技术交流QQ群:1027579432,欢迎你的加入! 1.gcc工作流程 预处理:–E 宏替换 头文件展开 注释去掉 xxx.c文件变成xxx.i文件(实际上也是c文件) 编译(此步骤时间最长):–S ...
- 系统中编译安装ZLMediaKit的步骤
这篇文章给大家分享的是centos6系统中编译安装ZLMediaKit的步骤.小编觉得挺实用的,因此分享给大家学习.如下资料是编译安装的步骤. 1.安装基础编译环境 1.1 gcc-5.4的安装 ...
最新文章
- 7个IntelliJ IDEA必备插件,提高编码效率
- mysql 查询条件优先级_mysql条件查询and or使用实例及优先级介绍
- 自己动手编写一个ajax extender
- python学习day2:类与对象
- 云服务器虚拟主机区别,云服务器和虚拟主机的区别
- linux 线程 waitforsingleobject,用Sleep或WaitForSingleObject实现线程的休眠 | 求索阁
- 解决scrapy不执行Request回调函数callback
- dubbo k8s 服务发现_将Dubbo微服务迁移到k8s集群环境中前的思考与落地
- 营销管理手册_某连锁动物医院营销管理咨询项目方案成功汇报
- php和gps终端设备通讯,运输车辆GPS定位+语音对讲通讯方案
- Web服务器基础详解
- 孙鑫MFC笔记之十六--Active控件
- 手机怎么用java9_java9_java9官方版 32位64位 最新版_天天下载手机版
- 如何将excel文件联系人转换成vcf文件
- 肾囊肿有什么症状呢?
- Java:通过读取文件头来得到文件真实类型
- Javascrit通过百度地图API获取客户端IP、地址
- VMware虚拟机安装Ubuntu kylin 麒麟系统教程 超详细
- Vmware安装Centos及Linux的介绍,命令
- Confluence 6 管理协同编辑 - 代理和 SSL 的考虑
热门文章
- 利用JQuery在动态页面的倒计时器
- 浏览器的不兼容,归纳几点html编码要素
- VS2005无法打开网站
- 今天闲来无事,做了个简易的ORM 感觉有点像ActiveRecord作业风格,又有点像iBatis...
- php与XML、XSLT、Mysql的结合运用 (转载)
- 【IJCAI2021】长文本知识抽取:基于语义分割的文档级三元组关系抽取
- 【收藏】一份最新的、全面的NLP文本分类综述
- 【知识图谱】知识图谱嵌入模型简介
- 【清华ACL2020长文】KdConv:多领域知识驱动的中文多轮对话数据集
- 详解机器学习之感知机理论与实践