gcc编译器详解

devtools/2024/9/20 7:24:46/ 标签: linux

目录

  • 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

【MySQL】了解并操作MySQL的缓存配置与信息

目录 一、查看缓存配置 二、查看缓存信息 查询MySQL的缓存相关信息&#xff0c;一般我们用两个命令&#xff1a; show variables like %query_cache%; show status like %qcache%; 一、查看缓存配置 查看缓存配置的相关的系统变量变量&#xff0c;返回给我们服务器缓存的配置…

数据结构——串的定义及存储结构

串的定义 串&#xff08;string&#xff09;——零个或多个任意字符组成的有限序列串是内容受限的线性表 串的几个术语 子串&#xff1a;串中任意几个连续字符组成的子序列称为该串的子串&#xff08;真子串是指不包含自身的所有子串&#xff09;主串&#xff1a;包含子串的串…

图算法 | 图算法的分类有哪些?(下)

图算法的分类有哪些&#xff1f;综合当前学术界和工业界图计算领域目前最新的发展情况&#xff0c;把图算法划分为了以下六大类&#xff1a; ❑中心性(Centrality)算法&#xff1a;如节点出入度、全图出入度、接近中心性、中介中心性、图中心性、调和中心性等。 ❑相似度(Simil…

结构体初始和嵌套

1.介绍了各种基本类型(如整型、实型、字符型)、构造数据类型(如数组)和指针类型。但是,在解决一些较复杂的实际问题时,只使用这些数据类型是不够的。例如,在描述一本图书的信息时,图书编号、书名、专业领域、作者、出版社、单价等都是和图书相关的基本信息,这些信息是作为一个整…

【 前端优化】Vue 3 性能优化技巧

Vue 3 性能优化技巧&#xff1a;让你的应用飞起来&#xff01; 大家好&#xff01;今天我想跟大家分享一些关于Vue 3性能优化的实用技巧。Vue 3带来了很多新的特性和改进&#xff0c;但只有了解并应用这些优化技巧&#xff0c;我们才能真正发挥它们的优势&#xff0c;打造更高…

Java企业面试题3

1. break和continue的作用(智*图) break&#xff1a;用于完全退出一个循环&#xff08;如 for, while&#xff09;或一个 switch 语句。当在循环体内遇到 break 语句时&#xff0c;程序会立即跳出当前循环体&#xff0c;继续执行循环之后的代码。continue&#xff1a;用于跳过…

《论软件需求管理》写作框架,软考高级系统架构设计师

论文真题 软件需求管理是一个对系统需求变更了解和控制的过程。需求管理过程与需求开发过程相互关联&#xff0c;初始需求导出的同时就要形成需求管理规划&#xff0c;一旦启动了软件开发过程&#xff0c;需求管理活动就紧密相伴。 需求管理过程中主要包含变更控制、版本控制、…

【PostgreSQL】安装及使用(Navicat/Arcgis),连接(C#)

简介 PostgreSQL 是一个功能强大的开源对象关系数据库系统 下载地址 PostgreSQL: Downloads 由于我电脑上安装的是arcgispro3.1所以需要下载对应的postgresql版本 PostgreSQL 12 对应的 PostGIS 版本主要是 3.5.0 或更高版本。 安装 一般设置为postgresql 安装扩展插件 此…

Linux下的gcc与gdb

目录 Linux下的gcc与gdb 代码编译与链接 函数库 gdb介绍和安装 gdb基本使用指令 示例代码 debug模式和release模式 基本指令 进入gdb调试与显示调试代码 创建断点与删除断点 启用和禁用断点 执行代码 逐语句和逐过程调试 断点跳转 显示指定变量以及对应内容 打印变量的值 执行到…

《论负载均衡技术在Web系统中的应用》写作框架,软考高级系统架构设计师

论文真题 负载均衡技术是提升Web系统性能的重要方法。利用负载均衡技术&#xff0c; 可将负载(工作任务) 进行平衡、分摊到多个操作单元上执行&#xff0c; 从而协同完成工作任务&#xff0c; 达到提升Web系统性能的目的。 请围绕“负载均衡技术在Web系统中的应用”论题&…

C++比大小游戏

目录 开头程序程序的流程图程序游玩的效果下一篇博客要说的东西 开头 大家好&#xff0c;我叫这是我58。 程序 #include <iostream> #include <Windows.h> using namespace std; int main() {int ir 1;char chparr[2] { 0 };int ip1 0;int ip2 0;int i 1;c…

手势识别&手势控制系统-OpenCV&Python(源码和教程)

项目特点 手部手势识别&#xff1a; 项目利用计算机视觉技术来识别手部的各种手势。这种技术可以应用于多种场景&#xff0c;比如人机交互、游戏控制、无障碍技术等。 自定义手势&#xff1a; 用户可以自定义手势&#xff0c;这意味着可以通过训练新的手势模式来扩展系统的功能…