【Linux】GCC编译器的使用
目录
前言:
一、GCC编译过程
1.预处理:
2.编译
3.汇编
4.链接
二、制作、使用动态库和静态库
1.静态库
2.动态库
三、好用的选项
1.gcc -E main.c
2.gcc -E -dM main.c > 1.txt
3.gcc -Wp,-MD,abc.dep -c -o main.o main.c
4.echo 'main(){}'| gcc -E -v -
前言:
2-1.GCC编译过程_哔哩哔哩_bilibili
2-2.GCC常用选项_哔哩哔哩_bilibili
(1)PC机上的gcc编译工具链,编译出来的程序是可以在X86平台上运行,要编译出能在ARM平台上运行的程序,必须使用交叉编译工具xxx-gcc。
(2)一个C/C++文件要经过预处理(生成.i文件)、编译(生成.s)、汇编(生成.o文件)以及链接(链接上应用程序)四步才能变成可执行文件。如下:
(3)我们可以通过不同的gcc选项控制输出不同的文件,常用的选项如下:
一、GCC编译过程
1.预处理:
C/C++源文件中常见的预处理命令,有包含命令(#inlcude),宏定义命令(#define)以及条件编译命令(#if、#ifdef)。
预处理就是将要包含(include)的文件插入原文件中、将宏定义展开、根据条件 编译命令选择要使用的代码,最后将这些东西输出到一个.i文件中等待进一 步处理
2.编译
编译就是将C/C++代码(上述.i文件)“翻译”成汇编代码。
3.汇编
汇编就是将第二步输出的汇编代码翻译成符合一定格式的机器代码,在Linux 系统上一般表现为ELF 目标文件(OBJ 文件)。
4.链接
链接就是将上步生成的 OBJ 文件和系统库的 OBJ 文件、库文件链接起来,最终生成了可以在特定平台运行的可执行文件。
二、制作、使用动态库和静态库
着重注意使用的库的路径。
1.静态库
利用静态库编译成的文件比较大,是将整个函数库的所有数据整合到目标代码中,它的优点是编译后的执行程序不需要外部的函数库支持。
gcc -c -o main.o main.cgcc -c -o sub.o sub.c//由.o文件创建静态库ar crs libsub.a sub.o//(如果.a 不在当前目录下,需要指定它的绝对或相对路径)gcc -o test main.o libsub.a
注:使用ar命令生成静态库,必须要用.o文件生成(不能用其它文件)。并且生成的.a文件必须要以lib开头(要不会找不到库)。
2.动态库
动态函数库在编译的时候没有编译进目标代码中,程序执行到相关函数时调用该函数库里的相应函数。
所以动态库相较于静态库来说,节省了系统空间,遇到库有bug时,只要用新的库把原来的库替换即可。
gcc -c -o main.o main.cgcc -c -o sub.o sub.cgcc -shared -o libsub.so sub.ogcc -o test2 main.o -L /所在目录/ -lsub//(以当前目录为例)gcc -o test2 main.o -L ./ -lsub
注:生成的动态库文件是在当前文件夹,编译时需要将其路径加入lib或者指定好所在路径。
如果没有lib时,运行时还需要运行下面的命令(指定路径):
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH: ././test2
运行测试(指定路径):
三、好用的选项
1.gcc -E main.c
查看预处理结果,比如头文件是哪个 ,具体结果:

2.gcc -E -dM main.c > 1.txt
把所有的宏展开,存在 1.txt 里,具体示例(打开1.txt):

3.gcc -Wp,-MD,abc.dep -c -o main.o main.c
生成依赖文件 abc.dep,后面 Makefile 会用,具体示例(打开abc.dep):

4.echo 'main(){}'| gcc -E -v -
编译'main(){}'时列出其头文件目录、库目录(LIBRARY_PATH),具体示例:

相关文章:
【Linux】GCC编译器的使用
目录 前言: 一、GCC编译过程 1.预处理: 2.编译 3.汇编 4.链接 二、制作、使用动态库和静态库 1.静态库 2.动态库 三、好用的选项 1.gcc -E main.c 2.gcc -E -dM main.c > 1.txt 3.gcc -Wp,-MD,abc.dep -c -o main.o main.c 4.echo main(){}| …...
浅谈一下socks5协议原理详解与应用场景分析
SOCKS5协议是一种网络传输协议,主要用于代理服务器和客户端之间的通信。它能够通过认证授权等多种方式,提供安全可靠的代理服务,适用于各种应用场景。 SOCKS5协议原理: 1.连接建立:客户端向代理服务器发送连接请求&…...
java面试准备17
事务的四大特性 (1)原子性:事务执行的最小单位,不可被分割,事务的原子性保证事务中的一连串动作要么都执行,要么都不执行。 (2)一致性:执行事务前后的数据保持一致&…...
ffmpeg的滤镜
FFmpeg 是一款开源的跨平台音视频处理工具,它提供了众多功能强大的滤镜用于视频/音频的加工处理。其中,滤镜(Filter)是 FFmpeg 中一个十分重要且常用的组件,它们可以实现对视频和音频的各种操作和变化,如转码、编解码、剪裁、裁剪…...
springboot项目感受03
继续上文 01.数据的部分已经完成了,此时需要考虑到前端与用户交互的部分,这里就需要网页html,服务器响应servlet。 网页的部分,html文件放在resource目录下的template文件中,servlet变成了controller包,其…...
notion插件:为你的工作流带来新生
在本文中,我们将介绍Notion的几款有助于提高生产力的插件。这些插件将加强Notion的功能,并为你的工作流程带来更多的便利。 我们特地为你准备了这本漫游指南:收录各种工具、信息和资源,携你共同探索浩瀚美丽的互联网海洋。 snackt…...
【python】Jupyter的使用(python代码编辑器)
文章目录一、Jupyter的介绍1、Jupyter是什么?2、Jupyter有什么独特之处?二、Jupyter的安装1、首先要下载python2、用pip命令下载Jupyter三、Jupyter的使用1、运行Jupyter2、简要介绍Jupyter的使用方法3、快捷键的使用四、总结一、Jupyter的介绍 1、Jupy…...
面试官:你做过什么有亮点的项目吗?
前言 面试中除了问常见的算法网络基础,和一些八股文手写体之外,经常出现的一个问题就是,你做过什么项目吗? 面试官其实是想看看你做过什么有亮点的项目, 其实大家日常做的项目都差不多,增删改查,登录注册&…...
【华为OD机试真题】猜字谜(javapython)
猜字谜 时间限制:1s空间限制:256MB 限定浯言:不限 题目描述: 小王设计了一个简单的猜字谜游戏,游戏的谜面是一个错误的单词,比如nesw,玩 家需要猜出谜底库中正确的单词。猜中的要求如下: 对于某个谜面和谜底单词,满足下面任一条件都表示猜中: 变换顺序以后一样的,…...
制作真人手办有哪些不便?怎么解决?
相信很多朋友都喜欢拍摄写真,比如孩子生日的时候,结婚纪念的时候,写真照片能留存住很多美好的记忆。 不过随着科技的发展,大家已经不能满足只靠照片来记录生活了,越来越多的人开始盯上了手办这件物品。将真人的照片和…...
网络安全行业现在好混吗,工资水平怎么样?
前段时间看到有人私信:网络安全行业现在好混吗,工资水平怎么样?今天在这里做个回答,不知你所说的“好混吗”指的是什么? 薪资高,待遇好?不加班,活儿少?不受气࿰…...
【SpringBoot】面试组合技-天羽屠龙舞,SpringBootApplication注解的作用是什么?SpringBoot怎么实现自动装配的?
SpringBoot源码下载地址:https://github.com/spring-projects/spring-boot/tags 文章目录🍟下载源码🍗环境准备🍖注解解析🍝SpringBootConfiguration注解🍛EnableAutoConfiguration注解🍤AutoC…...
2023-4-10-用Pthreads计算积分
🍿*★,*:.☆( ̄▽ ̄)/$:*.★* 🍿💥💥💥欢迎来到🤞汤姆🤞的csdn博文💥💥💥💟💟喜欢的朋友可以关注一下࿰…...
什么是js?js的基本使用
JavaScript(简称“ js”) 是一种具有函数优先的轻量级,解释型或即时编译型的编译语言虽然它是作为开发WEB页面的脚本语言而出名,但是它也被用到了很多非浏览器环境中,JavaScript 基于原型编程、多范式的动态脚本语言&a…...
自然数的拆分问题 字典序
目录 自然数的拆分问题 字典序 程序设计 程序分析 自然数的拆分问题 字典序 对于大于1的自然数N,可以拆分成若干个大于等于1的自然数之和。 Input 一个大于1的自然数N Output 所有的拆分情况.按字典序排列。 Sample Input...
软件测试——概念篇
目录 一、软件的生命周期 二、瀑布模型(Waterfall Model) 优点: 缺点: 三、螺旋模型(Spiral Model) 编辑优点: 缺点: 四、增量、迭代 区别: 五、敏捷 scrum…...
Qsort函数的应用与讲解
解释: qsort排序函数,即讲一段数组,字符串等进行有序的排列 分析: void qsort (void* base,//要排序的数组的首元素(就是数组名)size_t num, //要排序的数组元素的个数size_t size,//每个元素的字节大小&…...
蓝桥杯嵌入式第九届客观题解析
文章目录 前言一、题目1二、题目2三、题目3四、题目4五、题目5六、题目6七、题目7八、题目8九、题目910、题目10总结前言 本篇文章为大家带来第九届客观题的讲解。 一、题目1 STM32F103RBT6 微控制器是一款基于 ARM Cortex-M3 内核的单片机,它具有多个外设和总线,包括 APB1…...
多元函数的基本概念——“高等数学”
各位CSDN的uu们你们好呀,今天,小雅兰的内容是多元函数的基本概念,下面,让我们一起进入多元函数的世界吧 平面点集 多元函数的概念 多元函数的极限 多元函数的连续性 有界闭区域上多元连续函数的性质 平面点集 第一个是坐标平…...
LabVIEW-数值控件和布尔控件
简介 LabVIEW 以其强大、开放、图形化的虚拟仪器软件开发环境使得无论是否有过编程经验的工程师或科学家使用它时都可以快速、高效地与测量和控制硬件通信,并进行复杂的数据分析及处理。LabVIEW集成了满足GPIB、PXI、VXI、RS232、RS485、USB、DAQ等多种形式的设备互…...
掌握小程序逆向工具:wxapkg解析与代码还原全流程指南
掌握小程序逆向工具:wxapkg解析与代码还原全流程指南 【免费下载链接】wxappUnpacker 项目地址: https://gitcode.com/gh_mirrors/wxappu/wxappUnpacker 当你需要逆向分析小程序包时,是否遇到过这些痛点?wxapkg文件无法直接查看内容、…...
从PointNet++到SoftGroup:手把手带你复现5个经典3D点云分割算法(附PyTorch代码)
从PointNet到SoftGroup:5大3D点云分割算法实战解析与PyTorch实现指南 1. 3D点云分割技术演进与核心挑战 在三维视觉领域,点云分割技术正经历着从基础架构到复杂系统的革命性演变。不同于传统图像处理,点云数据具有非结构化、稀疏性和无序性三…...
ESP32嵌入式Web文件管理器:支持SPIFFS/LittleFS/SD卡
1. EspWebFileManager 库概述EspWebFileManager 是一款专为 ESP32 平台设计的嵌入式 Web 文件管理中间件库,其核心目标是将本地文件系统操作能力通过轻量级 HTTP 服务暴露至浏览器端,实现免串口、免烧录工具的现场文件运维。该库并非独立文件系统驱动&am…...
航拍小目标检测入门必看:YOLOv8 VisDrone实战第一阶段,基线mAP从32%提升至58%
本文是YOLOv8 VisDrone航拍目标检测全系列实战的第一阶段,基于我3年智慧城市、无人机安防项目的一线落地经验,针对VisDrone航拍场景最核心的「小目标密集、尺度变化大、类别分布不均、遮挡严重」四大痛点,完整拆解从0到1搭建基线模型的全流程。 本文全程配套VisDrone数据集…...
Houdini VEX实战:5步搞定变形管道的中心线生成(附常见问题修复)
Houdini VEX实战:5步搞定变形管道的中心线生成(附常见问题修复) 在三维动画制作中,处理变形管道的中心线是许多技术美术师面临的常见挑战。无论是角色动画中的血管、机械装置中的电缆,还是科幻场景中的能量管道&#x…...
Agisoft/PhotoScan手动对齐照片的实用技巧与常见问题解决
1. 手动对齐照片的核心原理与适用场景 当你用Agisoft/PhotoScan处理航拍或近景摄影测量数据时,可能会遇到部分照片无法自动对齐的情况。这种情况通常发生在拍摄场景缺乏明显纹理特征(比如大片草地、水面)或存在重复图案(如整齐排列…...
告别黑苹果配置噩梦:5大核心优势让开源工具OpCore-Simplify成为新手救星
告别黑苹果配置噩梦:5大核心优势让开源工具OpCore-Simplify成为新手救星 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 黑苹果配置一直是…...
PyTorch训练二分类模型时,你的损失函数为什么突然变成NaN了?排查BCELoss的5个坑
PyTorch训练二分类模型时,你的损失函数为什么突然变成NaN了?排查BCELoss的5个坑 深夜的调试台前,咖啡杯早已见底,屏幕上那个刺眼的"nan"却依然顽固地停留在损失值的位置。这不是第一次,也不会是最后一次——…...
互联网大厂最全 Java 面试八股文题库
纵观几年来的 Java 面试题,你会发现每家都差不多。你仔细观察就会发现,HashMap 的出现几率未免也太高了吧!连考察的知识点都一样,什么 hash 碰撞啊,并发问题啊!再比如 JVM,无外乎考内存结构&…...
纷析云开源财务软件:企业级财务管理完整解决方案指南
纷析云开源财务软件:企业级财务管理完整解决方案指南 【免费下载链接】纷析云财务软件 纷析云SAAS云财务软件开源版,包含账套、凭证字、科目、期初、币别、账簿、报表、凭证、结账等功能。 纷析云开源财务系统,餐饮行业财务软件、微服务架构财…...
