gcc编译器详解

devtools/2024/11/13 10:04:08/

目录

  • GCC编译器详解
    • gcc的编译流程
    • gcc编译细节
    • 静态库(gcc多个文件链接)
    • 动态库

GCC编译器详解

因为后面我需要用到Makefile来管理文件,因此不得不先学习一下gcc的使用 ,下面是一些具体的使用方法

gcc的编译流程

在这里插入图片描述
gcc编译的时候对应的文件后缀解释,其中.a代表静态库,.so代表动态库。其他的都是我们所熟知的,就不做过多赘述。
在这里插入图片描述
在我们使用gcc的时候,一般都需要把命令执行位置调整到.c文件对应的目录下面

gcc编译细节

gcc -E main.c -o main.i

如上所示我们可以使用gcc工具将.c文件预处理成.i文件,其中E是将文件进行预处理,o是输出一个处理后文件,如果不加-o是不会输出对应的文件只会打印在终端,后面的两个不加-o也可以自动生成对应的文件。

gcc -S main.c -o main.s

如上是将.c文件处理成.s汇编文件。

gcc -c main -o main.o
gcc -c a.c b.c c.c  #同时编译多个文件

如上是将.c文件编译生成.o可重定位的目标程序文件。

gcc main.c
gcc main.c -o main  #指定一个名字

不需要制定任何过程直接把三个过程全部执行完毕并生成对应的可执行文件。

静态库(gcc多个文件链接)

如果main.c需要用到其他文件的话,此时有以下两种方法生成最终的可执行文件

#方法一
ar -r [lib.a] [a.o] [b.o]  #lib是自定义库的名字,.o是需要链接成库文件的集合
gcc main.c lib.a -o main #编译main.c需要用到lib这个静态库文件。
gcc main.c -o main -l[库名] -L[库路径] #跟上面这一行实现结果一样,注意-l和-L后面不能留空格
#方法二
gcc main.o a.o b.o -o main #把所有需要链接的.o编译即可

动态库

gcc编译动态库方式如下,现将.c文件编译成二进制.o文件,然后用-share将.o编译成一个动态库文件,最后将mian.c和动态库文件一起编译成可执行文件,注意-l和-L后面不能留空格。
在这里插入图片描述如果想继续学习makefile详解,可以看下一篇文章


http://www.ppmy.cn/devtools/113160.html

相关文章

SQLite的入门级项目学习记录(一)

从来没有接触过数据库,但是最近有个项目要用到,从0开始记录一下学习的过程,以备忘。 python常见的几个免费数据库 在 Python 中,有几个流行的免费数据库选项,可以根据项目需求选择使用。以下是一些常见的免费…

模拟面试后端开发复盘

目录 一:项目的系统开发和设计思路 二:Java的反射是什么?在项目中有用到吗? 三:多态的实现原理 四:项目中的redis是用在了哪里 五:Session和Cookie的区别,Cookie可以被修改吗&a…

JAVA算法数据结构第一节稀疏矩阵

一、稀疏矩阵介绍: 稀疏矩阵是一种特殊类型的矩阵,其中大部分元素都是零。在处理这类矩阵时,如果仍然使用标准的矩阵存储方式(即传统的二维数组),则会浪费大量的存储空间来保存零值。为了提高存储效率以及…

DAY20240909 VUE:编程式导航,动态路由,命名路由

VUE:编程式导航,动态路由,命名路由 一、点击‘正在热映’列表能跳到对应详情1编程式导航创建新组件---详情Datail.vue组件模拟正在热映电影 列表页面为Datail.vue组件 配置路由、引入路由使用vue里的编程式导航方案实现点击列表跳转detail页面里 2动态路…

MATLAB 从 R2024B 开始支持树莓派 5

树莓派(Raspberry Pi)系列是一系列基于单板计算机的微型电脑,由英国的树莓派基金会于 2012 年开始发布。它的目标是提供一个低成本、易于学习和玩耍的平台,用于教育和初学者学习计算机科学和编程。 目前市面上,最新最…

el-table使用合计和固定列时,滚动条被覆盖区域无法拖拽问题

pointer-events文档 解决思路为通过pointer-events实现事件穿透,不响应固定列的拖拽,而是响应其子元素的拖拽事件 /deep/.el-table__fixed, /deep/.el-table__fixed-right {pointer-events: none; } /deep/.el-table__fixed *, /deep/.el-table__fixed-…

SQL,从每组中的 json 字段中提取唯一值

postgreySQL 库表的第 1 列是 ID,用于排序;第 2 列是分类;第 3 列类似 json(非标准 json), 并存在重复项。 idcomponent_typecomponent_names1INGESTION{ingestiona,atul, ingestiona, ingestionb}2INGESTION{test_s3…

获取无人机经纬度是否在指定禁飞区内

1. 计算公式: (AB X AE ) * (CD X CE) >= 0 && (DA X DE ) * (BC X BE) >= 0 参考: 判断点是否在矩形框(多边形)内_qt opencv 判断一点是否在矩形内-CSDN博客 2.测试结果: 3.实现完整代码: #include<cstd