gcc/g++工具的使用

GCC -O 优化等级详解 GCC提供选项控制代码的优化等级: 这些选项可以实现不同程度的优化。 没有任何优化选项的话,编译时的目标是降低编译成本,并使调试产生预期的结果。语句是独立的:如果你使程序停止在语句之间设置的断点处,你可以改变任何变量的值或者改变程序计数器的值使程序执行任意函数中的语句并得到源代码中期望的结果。 打开优化标志使编译器尝试以编译时间和可能的调试程序的能力为代价来改进性能和/或代码大小。 编译器... 阅读详情

gcc/g++工具的使用

一、程序执行的四个过程
1.预处理
gcc -E test.c -o test.i
  • 头文件的展开
  • 对define等进行替换
  • 处理条件编译指令
  • 删除所有注释

gcc : 使用gcc工具来编译代码

-E : 表示让代码在完成预处理后停下来,不再继续往后编译

-o : 形成临时文件的名称

在这里插入图片描述

通过我们之前学的命令行指令vs可以明显的看出,完成了展开头文件、删除注释、处理条件编译等操作。
在这里插入图片描述

2.编译
gcc -S test.i -o test.s
  • 语法分析
  • 词法分析
  • 语义分析
  • 符号汇总

S : 从现在开始,进行程序的翻译,做完编译工作,变成汇编之后,就停下来

在这里插入图片描述

可以看到代码转变为了汇编语言。
在这里插入图片描述

3.汇编
gcc -c test.s -o test.o

-c:表示让代码在完成编译后停下来,不再继续往后编译

汇编产生的文件一般以.o为后缀

在这里插入图片描述

编译阶段生成汇编代码转成计算机可以识别的二进制目标代码,.o 文件被称为可重定向二进制目标文件。
在这里插入图片描述

命令行输入od test.o

在这里插入图片描述

汇编得到的二进制目标文件使用一般的文本编辑器打开时是一堆我们看不懂的符号 (与符号的编码有关 – utf-8),我们可以使用 od 指令以指定格式来打开它 (默认是以八进制打开)。

4.链接
gcc test.o

链接的过程,形成了一个可执行程序。
在这里插入图片描述

这几个步骤刚好和键盘上的ESC很相似,但是只有-c选项是小写的。

三个命令顺序为ESc。

二、链接方式和函数库

在刚刚的操作中,printf是调用的c语言函数库中的函数,并不是我们自己实现的,而是别人写好,我们直接拿来用的。只有当链接时,我们的代码才会和库里对应的实现相关联。

c标准库的位置
ls /lib64/libc*

我们平时说的装环境就是需要安装语言的静态和动态库,这样才能正常利用库里面的函数进行代码的编译处理。

链接的本质是我们在调用库函数时如何与标准库相关联的问题


1.动态链接和静态链接

动态链接是指执行代码时,如果遇到库函数调用就跳转到动态库中对应函数的定义处,然后执行该函数,执行完毕后再跳转回原程序并继续往下执行。

优点:节省资源

缺点:库一旦丢失,所有相关程序失效

静态链接则是直接将本程序内部要使用的库函数从对应的静态库中拷贝一份过来。

优点:不依赖任何库,可以独立运行

缺点:非常浪费资源

2.动态库和静态库
  • 在Linux下,我们可以使用 “file” 指令来辨识文件类型,使用 “ldd” 来打印或者查看程序运行所需的共享库。
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

  • 动态库在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销。
  • 动态库一般后缀名为“.so”,如前面所述的 libc.so.6 就是动态库。
  • gcc 在编译时默认使用动态库。完成了链接之后,gcc 就可以生成可执行文件。

  • 静态库是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了。
  • 其后缀名一般为“.a

默认生成静态链接
gcc test.c -o mytest -static

由于静态链接生成的可执行程序非常大,所以我们一般推荐使用动态链接。

Linux下一般都使用的动态链接,所以静态链接的库需要我们进行下载。
在这里插入图片描述

sudo yum install -y glibc-static
sudo yum install -y libstdc++-static

在这里插入图片描述

不难看出静态链接的可执行程序比动态链接的可执行程序大了很多倍。

三、gcc/g++的基本使用
1.安装
sudo yum install -y gcc-c++
sudo yum install -y libstdc++-static//安装C++静态库
2.使用

gcc/g++的使用和之前使用的方法相同,当然也可以直接生成可执行程序。

gcc test.c -o mytest1
g++ test.cpp -o mytest2

在这里插入图片描述

gcc编译器的使用方法详解【图文教程】 GCC(GNU Compiler Collection)是一个开源的编译器套件,支持多种编程语言,包括 C、C++、Objective-C、Fortran、Ada 等。它是 Linux 和许多 Unix-like 系统中的默认编译器,也可以在 Windows 等平台上使用。 阅读详情

相关推荐

C++编译之(1)-g++单/多文件/库的编译及C标准的发展历程

c++编译过程及c语言版本发展历程简介

youlinhuanyan的博客 2945

cython之setup.py模块编写Extension

目录概述Extension链接器路径 概述 fastapi系列还没搞完, 又开了个新坑。fastapi暂时因为没啥项目,所以没什么好更新的,然后自己在手写一个fastapi 的二次开发框架,主要是带user和权限管理相关的东西,减少部分代码的开发。 今天主要是讲cython的一些功能,之后fastapi的部分代码需要拥戴cython,进行加密处理或者提高运行速度都是极好的。对于对c/c++不熟悉的还是有一定帮助的。(注意,在windows上使用cython可能会失败)(最好的学习方式其实是看别人写的代码。。

chise_ 4807

STM32N6:MCU+NPU架构如何重塑边缘AI部署新范式

STM32N6作为业界首款MCU+NPU架构的通用微控制器,通过集成600 GOPS算力的NPU与800MHz Cortex-M55内核,实现了边缘AI部署的革命性突破。该方案在工业视觉和智能家居等场景中,以超低功耗和成本提供实时AI处理能力,性能较传统MCU提升超100倍,重塑了边缘智能设备的设计范式。

g8f9d0s1a2的博客 1291

【C++】g++指令使用指南

【C++】g++指令使用指南

weixin_46274756的博客 1万+

UE5.1实战:从零到打包,手把手教你用UMG和蓝图搭建智慧城市数字孪生界面

本文详细介绍了如何使用UE5.1的UMG和蓝图系统从零开始构建智慧城市数字孪生界面。通过环境准备、UMG界面设计、蓝图功能实现、数据绑定到最终打包发布的全流程指导,帮助开发者掌握数字孪生技术的核心应用,提升智慧城市可视化开发效率。

weixin_30251829的博客 619

PowerBI参数化实战:3分钟搞定动态数据源切换(附常见错误排查)

本文详细介绍了PowerBI参数化实战技巧,教你3分钟实现动态数据源切换。通过创建参数、改造查询和测试切换三步,轻松应对多环境部署与团队协作中的路径问题,并附上常见错误排查指南,有效提升报表的可维护性和工作效率。

p1q2r的博客 585

Linux开发工具——gcc/g++

本文介绍了Linux下使用gcc/g++编译运行代码的完整流程。gcc用于C语言,g++兼容C++和C语言。编译过程分为预处理(宏替换、去注释)、编译(生成汇编)、汇编(生成机器码)和链接(生成可执行文件)四个步骤,可通过-E、-S、-c选项分步执行。文章还对比了静态库(.a)和动态库(.so)的特点:静态库独立但体积大,动态库共享但依赖性强。最后提供了常用gcc选项说明,包括优化级别、调试信息生成等实用编译参数。

lrhhappy的博客 1057

从零构建XVC协议栈:FPGA+W5300的跨界调试架构实战

本文详细介绍了如何从零构建XVC协议栈,通过FPGA与W5300以太网控制器的创新组合实现跨界调试架构。重点解析了JTAG时序逆向、TCP/IP协议栈集成与XVC协议实现,提供了硬件设计优化和性能加速技术,为嵌入式开发者和FPGA工程师提供实用的远程调试解决方案。

raspberrypi5的博客 247

Linux基础开发工具—gcc/g++

GCC(GNU Compiler Collection,GNU编译器套件)是由GNU项目开发的编程语言编译器。它最初被设计为GNU操作系统的标准编译器,现在已经成为大多数类Unix操作系统(如Linux、BSD、MacOS X等)的标准编译器。gcc与g++都是GNU(组织)的一个编译器。它们的主要区别有C 代码:优先使用 gcc,避免引入不必要的 C++ 依赖。C++ 代码:优先使用 g++,简化编译流程。混合代码:分别用 gcc 编译 C 代码,g++ 编译 C++ 代码。

渣檬Charman的博客 1188

【OTDR曲线工具箱】04 批量生成sor文件

软件下载地址:http://120.78.150.214:9999/isora.zip 通过一个测试数据sor文件,批量生成多个测试文件(基于Bellcore GR196及SR-4731标准)。主要考虑哪些问题: 1、sor测试是否符合要求(主要是衰减系数) 2、多个文件的创建时间 3、文件必须随机处理,不要看省去一模一样。 来说说怎么操作的 第一步:选择参考曲线 参考曲线的选择由两种方法:从文件中导入、从曲线库中选择。 其中曲线库分为公共库和个人库两种,平时浏览的sor文件都可以加载到库中。 第二步

夜晚是传说的博客 5268

cmu15445(2024fall) project 2

project 2比p1难度要更大,代码量更大且涉及的知识更多,实现中出现的bug更多,好在是最后全部解决了。我最大的收获在于对于多线程编程的理解更深入了,实际发现解决了多个多线程相关的bug,学会了更多多线程下debug的技巧方法,也见识了更多多线程的bug情况。在之后可以更系统的学习一下多线程编程。同时学会实现B+树也是需要掌握的基础。

Jerome_Yi的博客 1559

Linux工具学习之【gcc/g++】

书接上文,我们已经学习了Linux中的编辑器vim的相关使用方法,现在已经能直接在Linux中编写C/C++代码,有了代码之后就要尝试去编译并运行它,此时就可以学习一下Linux中的编译器gcc/g++了,我们一般使用gcc编译C语言,g++编译C++(当然g++也可编译C语言),这两个编译器我们可以当作一个来学习,因为它们的命令选项都是通用的,只是编译对象不同。除了编译器相关介绍外,本文还会库、自动化构建工具、提权等知识,一起来看看吧

北 海的博客 4060

边缘AI工业落地:YOLO26-Seg + RK3588 NPU 极致部署(低功耗+实时实例分割,工业场景全覆盖)

本次实战汇总了「YOLO26-Seg+RK3588 NPU」工业边缘部署中最常见、最致命的8个坑点,所有坑点均来自真实工业项目,解决方案均为零代码/一键操作,无需复杂配置,能让你少走90%的弯路,节省大量时间,必看必记!❌ RKNN转换报错「算子不支持/模型加载失败」→ ✅ 导出ONNX时必须指定opset=12,重新导出即可,RK3588唯一兼容版本;❌ 分割mask错位/轮廓模糊 → ✅ 导出ONNX时加,并保证RKNN的归一化参数与YOLO26一致,零代码修复;

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1717

【Linux】gcc/g++工具

摘要:GCC/G++是Linux下核心的C/C++编译器工具链。GCC默认处理C语言,G++专为C++设计并自动链接标准库。编译流程分预处理、编译、汇编和链接四阶段,可用g++一键完成。常用选项包括调试(-g)、优化(-O2)和警告控制(-Wall)。调试时建议搭配GDB和Valgrind工具,重点关注链接错误和内存问题。掌握这些工具和技巧是Linux开发的基础能力。

nanguochenchuan的博客 489

数据库课程案例——电力公司收费管理系统分析与实践,完整带SQL语句

某电力公司收费管理信息系统实现客户信息、用电类型(类别号、类别名、电价)及业务员管理;实现客户用电信息管理(客户号、月份、用电类别号、用电度数);实现客户费用管理(客户号、月份、费用、收费标志),收费标志的默认值为“未收”;实现收费登记(客户、月份、应收费用、实收费用、业务员),并自动修改收费标志(用触发器实现);创建触发器,实现收费时自动更加应收费用和实收费用,计算本次结余,然后修改客户信息表中的结余金额;创建存储过程统计指定月份应收费用和实收费用;创建存储过程查询指定月份未交费的用户信息,以便崔费;创建

qq_44242804的博客 2761

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

开发工具——gcc/g++

开发工具gcc/g++完成代码的编写完后,要形成可执行程序,需要编译工具进行对代码的编译。C语言的编译工具是gcc,c++的编译工具是g++。如果g++没有的话,可以切换到root执行命令yum install -y gcc-c++C语言和C++的编译:gcc只能编译C语言,而g++可以编译c++也可以编译C语言。在C语言的最后一章,已经学习了源代码到可执行程序的的简单步骤。下面来详细一点的说明。源代码,即程序,本质上是文本;可执行程序是机器语言,也就是二进制组成的。文本翻译成二进制要经过以下几个步骤

travel_dream的博客 1686

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【Linux】Linux工具学习之gcc/g++

接上文,我们已经学习了Linux中的编辑器vim的,现在已经能直接在Linux中编写C/C++代码,有了代码之后就要尝试去编译并运行它,此时就可以学习一下Linux中的编译器gcc/g++了,我们一般使用gcc编译C语言,g++编译C++(当然g++也可编译C语言),这两个编译器我们可以当作一个来学习,因为它们的命令选项都是通用的,只是编译对象不同。除了编译器相关介绍外,本文还会库、自动化构建工具、提权等知识,一起来看看吧。

Aron的博客 1234

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Linux 工具 gcc/g++ 与 gdb

gcc/g++是Linux编译器,主要进行C/C++代码的编译任务gdb是Linux调试器,用于调试C/C++代码。

subenhao的博客 349

Linux开发工具的使用(二):gcc/g++与make/makefile

本文介绍了Linux环境下常用的编译工具gcc/g++以及项目自动化构建工具make/Makefile的使用方法。gcc主要用于C语言编译,g++则用于C++,二者使用原理相同。编译过程分为预处理、编译、汇编和链接四个阶段,通过不同选项控制生成不同类型的中间文件。文章还详细说明了静态链接与动态链接的区别及优缺点,静态链接将库代码直接嵌入可执行文件,而动态链接则在运行时加载共享库。此外,文章介绍了Makefile的基本结构和自动化推导功能,如何通过伪目标.PHONY实现强制重新编译,以及如何使用自动变量简化M

Surplus886的博客 1988

Linux开发工具【gcc/g++】

本文包括Linux开发工具gcc/g++的讲解和使用,动静态库的基本介绍,自动化构建工具make/Makefile的讲解和使用,以及sudo提权的讲解和配置,干货满满!

cw412524的博客 727

【Linux基础开发工具】gcc/g++使用&&make/Makefile

了解完vim编辑器的使用,接下来就可以尝试写一写代码啦,本期我将会向大家介绍Linux环境下,gcc/g++的使用方法,以及一些使用技巧。本文介绍的gcc/g++以及make/makefile都是在日常工作中常用的工具,make和makefile用于自动化构建过程,特别是在大型项目中。

2202_75605090的博客 2729

Linux基础——Linux开发工具(中)_gcc/g++

在理解完本篇之后希望各位都能理解gcc/g++的四个步骤,gdb的简单使用方法!Linux开发工具(yum, vim)

EterNity_TiMe_的计算机学习之路 684

『Linux升级路』基础开发工具——gcc/g++篇

在前面的文章中我们学会了vim的用法,可以写一些代码,要想让我们的代码运行起来,还需要我们学会编译工具gcc、g++的使用。

小王又困了的博客 2633

【Linux】超好用的编译工具 —— gcc/g++

记忆gcc选项的小技巧: 预处理、编译、汇编对应的gcc选项分别是 “-E”、“-S”、“-c”,我们把这几个字母连起来也就是键盘的最左上角那个键【Esc】,我们只需要记住E和S是大写的,c是小写的即可。 而预处理、编译、汇编后形成的文件后缀连起来就是【iso】(iso也就是镜像文件的后缀)。 所以最后我们只需要记住选项【Esc】对应文件后缀【iso】即可。

这是一个非常有意思的博主 2万+

【Hello Linux】Linux工具介绍 (gcc/g++ gdb)

介绍Linux的常用工具gcc/g++ 以及gbd

小萌新的博客 2180

【Linux】--- 基础开发工具之yum/apt、vim、gcc/g++的使用

当用户想下载软件或工具时,都需要到特定位置进行下载,比如你在手机上下载app,需要到对应的应用商城下载。类似的,在Linux系统下也有下载的需求,通常来说下载方式主要有以下几种:1.源代码安装:下载程序的源码,进行编译得到可执行程序之后使用,非常不方便。2.rpm包安装:将源码提前在各种不同环境下编译好,形成一种压缩包叫rpm包,直接下载可执行程序就能安装好,实际上就是把可执行程序拷贝到指定路径下。但是主要可能会存在软件之间依赖问题,比如还需要你安装其他软件,额外的库之类的。3.yum/apt安装。

2301_79448270的博客 2057
上一篇: Linux 软件包yum和编辑器vim + sudo权限
下一篇: gdb调试工具和makemakefile工具
沉着冷静2024
博客等级 码龄5年 669粉丝 128原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值