Linux 编译器gcc/g++使用

gcc/g++同理

编译器运行过程

1. 预处理(进行宏替换)

gcc -E a.c -o a.i

预处理后还是c语言

-E 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面

告诉gcc,从现在开始进行程序的翻译,将预处理工作做完停下

2. 编译(生成汇编)

gcc -S a.o -o a.s

-S  编译到汇编语言不进行汇编和链接 

从现在开始进行程序的翻译,将编译工作做完,就停下,可以从.i开始也可以从.c开始

3. 汇编(生成机器可识别代码)

将汇编语言翻译成二进制文件(目标文件)

gcc -c a.s -o a.o//.o文件不能执行

-c  编译到目标代码

从现在开始进行程序的翻译,将汇编工作做完就停止

4. 连接(生成可执行文件或库文件)

gcc a.o –o a

将可重定位目标二进制文件和库进行连接形成可执行程序

./[生成的目标文件]

./a

执行可执行文件

库的概念

动态库不能缺失,一旦对应动态库缺失,影响的不知一个程序,会导致很多程序都无法运行

在编译器使用静态库进行静态链接时,会将自己的方法拷贝到目标程序中,该程序以后不用再依赖静态图

linux中 .so动态库  .a 静态库

Windows中 .dll动态库  .lib静态库

在linux中编译形成可执行程序,默认采用的是动态链接

Linux中静态链接指令:gcc a.c -o a_static -static

安装静态库

C/C++静态库

yum install -y glibc-static//C静态库
yum install -y libstdc++-static//C++静态库

gcc格式

格式 gcc [选项] 要编译的文件 [选项] [生成的目标文件]

gcc选项

-E 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面

告诉gcc,从现在开始进行程序的翻译,将预处理工作做完停下

-S  编译到汇编语言不进行汇编和链接

从现在开始进行程序的翻译,将编译工作做完,就停下,可以从.i开始也可以从.c开始

-c  编译到目标代码

从现在开始进行程序的翻译,将汇编工作做完就停止

-o 文件输出到文件 -o后面永远跟着可执行程序文件

-static 此选项对生成的文件采用静态链接

-g 生成调试信息。GDB 调试器可利用该信息。(要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项,进入debug模式

-shared 此选项将尽量使用动态库,所以生成文件比较小,但是需要系统由动态库.

-O0 -O1 -O2 -O3 编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高

-w  不生成任何警告信息。

-Wall 生成所有警告信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/844786.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【RSGIS数据资源】1981-2021年中国陆地生态系统蒸腾蒸散比数据集

文章目录 摘要基本信息数据结构和内容采集方法信息数据处理方法与数据质量 摘要 本数据集涵盖了中国陆地生态系统蒸腾蒸散比(T/ET)、蒸腾(T)及蒸散(ET)三组数据。基于模型-数据融合方法,集成PT…

树与图的深度优先遍历

数和图的存储方式与遍历 数和图的存储方式: 一般有两种 树是一种特殊的图(即无环联通图)。所以下面只讲图。 图的话分为两种:①有向图(边是有方向的:a➡️b)和 ②无向图(边是无方…

HNU-计算机体系结构-实验2-Tomasulo算法

计算机体系结构 实验2 计科210X 甘晴void 202108010XXX 1 实验目的 熟悉Tomasulo模拟器同时加深对Tomasulo算法的理解,从而理解指令级并行的一种方式-动态指令调度。 掌握Tomasulo算法在指令流出、执行、写结果各阶段对浮点操作指令以及load和store指令进行什么…

AWS存储之Backup

AWS Backup是一项经济高效、完全托管且基于策略的服务,可简化大规模数据保护。它是亚马逊提供的一项全面的备份服务,可用于备份和恢复AWS中的各种数据,包括Amazon EBS卷、Amazon RDS数据库、Amazon DynamoDB等。 AWS Backup 是一项完全托管的…

网络融合的力量:企业如何通过“一网多用”提升业务效率

随着企业业务的不断扩展,网络需求变得日益复杂。需要的是一种能够统一承载办公、生产、销售和运营等多业务需求的网络架构。这种“一网多用”的架构,不仅简化了网络部署和管理,还提升了效率并降低了成本。 “一网多用”架构的实际应用&#x…

Guns框架:基于主流技术Spring Boot2 + Vue3 + Antd Vue的现代Java应用开发新纪元

Guns框架:基于主流技术Spring Boot2 Vue3 Antd Vue的现代Java应用开发新纪元 摘要:随着信息技术的飞速发展,软件开发框架在提升开发效率、降低成本方面扮演着至关重要的角色。Guns框架,作为一个现代化的Java应用开发框架&#x…

微信图片识别文字怎么弄?介绍三个识别方法

微信图片识别文字怎么弄?在信息爆炸的时代,我们每天都会接触到大量的图片信息,其中包含的文字内容往往是我们获取信息的重要途径。然而,手动输入图片中的文字既费时又费力,这时,一款能够准确识别微信图片中…

学习笔记——动态路由协议——OSPF(OSPF基本术语)

OSPF基本术语 1、链路状态(LS)与链路状态通告(LSA) 链路(LINK):路由器上的一个接口。 状态(State):描述接口以及其与邻居路由器之间的关系。 (1)链路状态(LS) OSPF是一种链路状态协议,所谓的链路状态,其实就是路由器的接口状态…

vue中axios的使用

1.get请求 axios.get(http://127.0.0.1:2333/show_course, {params: {param: choice} }) .then((response) > {this.list response.data; }) .catch((error) > {console.error(error); }); 2.post请求:当需要向服务器提交数据以创建新资源时使用。例如&…

Java程序中,不同jar包,有2个完全相同的类,运行时的加载顺序

在Java程序中,如果有两个完全相同的类存在于不同的jar包中,那么在运行时究竟加载哪个类,主要取决于类加载器的类路径(Classpath)搜索顺序。 Java使用类加载器(ClassLoader)来动态加载类。当Jav…

JS导出excel功能

在JavaScript中可以使用第三方库来实现导出Excel的功能&#xff0c;比如使用xlsx库。以下是一个简单的示例&#xff1a; 首先&#xff0c;在html文件中引入xlsx库&#xff1a; <script src"https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.16.9/xlsx.full.min.js"…

QGIS开发笔记(三):Windows安装版二次开发环境搭建(下):将QGis融入QtDemo,添加QGis并加载tif遥感图的Demo

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/139136356 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…

29-ESP32-S3-WIFI篇-00 STA模式扫描全部 AP

ESP32-S3 WIFI_Driver 引言 ESP32-S3是一款集成了Wi-Fi和蓝牙功能的芯片。关于WIFI的部分&#xff0c;其实内容比我想象的要多得多。所以通常来说&#xff0c;如果你想要编写自己的Wi-Fi应用程序&#xff0c;最快捷的方法就是先找一个类似的示例应用&#xff0c;然后将它的相…

实战项目:飞机坦克大战 —— 面向对象编程之旅

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、项目概览与背景介绍 二、面向对象编程基本概念解析 1. 类与对象 2. 构造函数与属性封…

Java对象的揭秘

前言 作为一个 Java 程序员&#xff0c;我们在开发中最多的操作要属创建对象了。那么你了解对象多少&#xff1f;它是如何创建&#xff1f;如何存储布局以及如何使用的&#xff1f;本文将对 Java 对象进行揭秘&#xff0c;以及讲解如何使用 JOL 查看对象内存使用情况。 本文是基…

【JavaScript脚本宇宙】从jQuery到Popmotion:DOM操作和动画库

揭秘流行JavaScript库&#xff1a;从简单操作到复杂动画 前言 随着Web技术的发展&#xff0c;JavaScript库已成为开发人员日常工作中不可或缺的工具。本文将探讨六种流行的JavaScript库&#xff0c;涵盖其概述、主要特性、使用示例及使用场景等多个方面。 欢迎订阅专栏&#…

车载客流统计设备:双目3D还原智能统计算法的应用与优势

随着城市交通的日益繁忙和公共交通系统的不断完善&#xff0c;对公交车等交通工具的客流统计和分析变得越来越重要。传统的客流统计方法往往存在效率低下、精度不足等问题&#xff0c;难以满足现代城市交通管理的需求。而基于双目3D还原智能统计算法的车载客流统计设备&#xf…

智能家居ZigBee网关选型定制指南:主控,操作系统,天线设计,助力IoT开发者

随着科技的发展和人们生活水平的提高&#xff0c;智能家居以其便捷、舒适、安全等特点&#xff0c;逐渐走进千家万户&#xff0c;成为家装消费品换新升级的重要方向。在智能家居系统中&#xff0c;网关扮演着中枢控制器的角色&#xff0c;负责将各种设备连接到互联网上&#xf…

代码随想录算法训练营Day6| 242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和

242.有效的字母异位词 知识点补充&#xff1a; 1.遍历HashMap中的值&#xff1a; HashMap<Integer,Integer> map new HashMap<Integer,Integer>(); for(Integer num:map.values()){ } 2.遍历HashMap的键&#xff1a; HashMap<Integer,Integer> map new Ha…

Debian常用命令详解

Debian是一个广泛使用的Linux发行版&#xff0c;以其稳定性和包管理系统的丰富性著称。对于新手和经验丰富的系统管理员来说&#xff0c;掌握常用的Debian命令至关重要。这篇文章将详细介绍Debian系统中常用的命令&#xff0c;包括文件和目录操作、软件包管理、用户和权限管理、…