Linux中的编译器gcc/g++

news/2024/9/19 4:58:39/ 标签: linux

目录

一、gcc与g++的区别

1.gcc编译器使用

2.g++编译器使用

二、gcc/g++编译器编译源文件过程

1.预处理

2.编译

3.汇编

4.链接

三、静态库和动态库 

1.库中的头文件作用

2.静态库

3.动态库

四、gcc编译器的一些选项命令


一、gcc与g++的区别

gcc用于编译C语言代码,g++用于编译C语言或c++代码

1.gcc编译器使用

gcc编译器用于编译C语言代码

gcc test.c//默认生成可执行文件a.out
gcc -o my.exe test.c//指定生成可执行文件my.exe
gcc test.c -o my.exe//指定生成可执行文件my.exe
2.g++编译器使用

g++编译器既可以编译C语言代码,也可以编译c++代码

(c++代码文件名后缀可以是.cc  .cpp  .cxx)

g++ Test.cc//默认生成a.out可执行文件
g++ -o my.exe Test.cc//指定生成my.exe可执行文件
g++ Test.cc -o my.exe//指定生成my.exe可执行文件

二、gcc/g++编译器编译源文件过程

编译过程:预处理、编译、汇编;

链接过程:链接

1.预处理

宏替换、去注释、展开头文件、条件编译(-E表示编译器预处理完成后停止操作,-o表示指定目标文件)

g++ -E Test.cc//预处理,不指定生成具体文件,默认将预处理后的内容输出到屏幕上
g++ -E Test.cc -o Test.i//预处理,指定生成Test.i文件
2.编译

将C代码翻译为汇编代码(-S表示编译器编译完成后停止操作)

g++ -S Test.i -o -Test.s//编译,指定生成Test.s文件 
g++ -S Test.cc -o -Test.s//编译,但是是从c代码经过预处理后再编译
3.汇编

将汇编代码翻译为机器指令,生成目标文件(-c表示编译器汇编完成后停止操作)

g++ -c Test.cc -o Test.o//汇编,生成指定目标文件Test.o
4.链接

将目标文件和库链接起来生成可执行程序

g++ Test1.o -o Test1.exe//链接,生成指定可执行程序Test1.exe

三、静态库和动态库 

链接过程中目标文件链接的库,这个库就是函数库,是某种语言将许多函数方法封装起来的库

库又分为静态库和动态库

Windows系统下,静态库文件后缀是.lib;动态库文件后缀是.dll

Linux系统下,静态库文件后缀是.a;动态库文件后缀是.so

1.库中的头文件作用

库中有大量函数方法,那么我们如何知道其中究竟有哪些方法呢?

因此库中又引入了头文件,在库中奖不同的函数方法分类,分装到多个头文件中,这样我们就可以通过包含头文件来知道其中包含哪些函数方法并调用这些函数方法了

2.静态库

目标文件链接静态库的链接方式称为静态链接,是将我们需要用到的方法从静态库中拷贝到自己的目标文件中。

静态链接的方式可以避免出现库缺失程序也崩溃的情况,因为链接后形成的可执行程序就与静态库无关了,缺点是浪费资源空间。

3.动态库

目标文件链接动态库的连接方式称为动态链接,编译期间就会确定好目标库的地址,程序运行时需要用到动态库中的函数方法,则会跳转到动态库中执行该概述方法,执行完成后再返回继续原先程序的运行。

动态链接的方式可以大大节省空间资源,但是动态库一旦缺失了,那么所有动态链接该动态库的可执行程序都会无法运行。

Linux系统中,gcc/g++编译器默认使用动态链接,且默认不提供静态库。如果需要使用静态链接和静态库,需要在编译文件后加上-static,且静态库需要自行安装

sudo yum install -y glibc-static libstdc++-static//安装静态库gcc -c test1.c -o test1_static.exe -static//目标文件静态链接

四、gcc编译器的一些选项命令


http://www.ppmy.cn/news/1520624.html

相关文章

Power Automate向Power Apps传Table数据

Flow返回查询的数据表并返回Apps 场景介绍代码开发Power Automate开发数据库Power Automate调用存储过程 Power Apps开发代码开发 测试 场景介绍 我们通常会使用Flow 查询数据表然后Apps端将表中的数据显示出来,我们怎么来传呢,它自带的response for Po…

揭秘GLM-130B爆火秘诀:颠覆性自回归填空和二维位置编码的训练黑科技

GLM(通用语言模型)的训练过程确实复杂,尤其是涉及到其独特的预训练目标和架构调整。让我来详细解释一下GLM的训练过程。 1. 模型架构简介 GLM-130B 是基于 Transformer 架构的双语(中文和英文)语言模型,拥…

仕考网:应届生考公务员的优势

应届生报考公职存在显著优势,建议大家充分利用这一身份: 1.政策优惠 在不缴纳社保的前提下,应届毕业生可在两年内利用此身份参与各类公职考试。国考及省考中,大量岗位专为应届生设置,其中国考约有三分之一的职位仅限…

解除本地Git仓库与远程仓库关联

清除Git凭据缓存 Git在本地会缓存你的认证信息,以便在后续操作中自动使用。你可以通过以下步骤来清除这些缓存的凭据: 对于Windows用户: 打开“控制面板”并选择“凭据管理器”(Credential Manager)。在“Windows凭据…

C#如何使用外部别名Extern alias

说到 extern 关键字,只是很简单告诉大家用来做区分两个不同 dll 有相同的命名空间和类,可以使用这个关键字。 在遇到了存在两个 dll 都有相同的命名空间,而且有相同的类的时候,如何同时使用这两个 dll 的类。 这里有两个库 Jall…

通俗易懂理解Java枚举类

什么是枚举 一组常量。 比如一年的 4 个季节,一年的 12 个月份,一个星期的 7 天,方向有东南西北等。 Java 枚举类使用 enum 关键字来定义,各个常量使用逗号 , 来分割。 例如定义一个颜色的枚举类。 enum Color { RED, GREEN, …

C++菜鸟教程 - 从入门到精通 第一节

一.C简介 C 是一种编程语言,它是由 Bjarne Stroustrup 于 1979 年在贝尔实验室开始设计开发的。C 进一步扩充和完善了 C 语言,是一种面向对象的程序设计语言。C 可运行于多种平台上,如 Windows、MAC 操作系统以及 UNIX 的各种版本。 C 是一种…

MongoDB之MongoDB Compass工具

MongoDB Compass 是 MongoDB 官方提供的一款图形化用户界面 (GUI) 工具,用于与 MongoDB 数据库进行交互和管理。Compass 提供了丰富的功能,能够帮助开发者、数据库管理员以及数据分析师轻松管理和分析 MongoDB 数据。以下是对 MongoDB Compass 的详细介绍…

Go语言 Go程基础

本篇文章主要为Go语言 Go程基础内容介绍及代码示例。 目录 并发与并行 Go程介绍 简单go程示例 匿名函数写法 启动多个子go进程 总结 并发与并行 并发:电脑同时听歌,看小说,看电影。cpu根据时间片进行划分,交替执行这个三个…

Windows安装docker,启动ollama运行open-webui使用AIGC大模型写周杰伦歌词

Windows安装docker,启动ollama运行open-webui使用AIGC大模型写周杰伦歌词 1、下载docker的Windows版本。 docker下载地址: https://docs.docker.com/desktop/install/windows-install/https://docs.docker.com/desktop/install/windows-install/ 2、设…

java基础知识-JVM知识详解

一、JVM内存结构 Java虚拟机(JVM)的内存结构主要分为几个不同的区域,每个区域都有其特定的目的和功能。以下是JVM内存结构的主要组成部分: 先看一下总体的结构图 程序计数器(Program Counter Register) 这是一个较小的内存块,用于存储当前线程所执行的字节码指令的地址…

tomato靶机通关攻略

主机发现 用kali去扫描端口,发现有3个开放端口 访问网站 在kali里面进行目录扫描,找到一个antibot_image 找到一个/antibot_image/ 目录,进而找到/antibots/目录 发现可能存在文件包含 页面通过image传参查看passwd文件 页面通过image传参查…

Linux 虚拟网络三大基石:Namespace、Veth pair 与 Bridge

引言 在 Linux 的世界里,虚拟网络技术是系统管理、云计算和容器化不可或缺的一部分。今天,我们将深入探讨构建这些虚拟网络的三大基石:Namespace、Veth 对和 Bridge,揭示它们如何在背后默默支撑起你的网络环境。 Namespace&…

区块链入门

1.1 区块链技术的发展 随着 2008 年比特币(Bitcoin) 的发明,一个被称为区块链(Blockchain) 的新概念进入了人们的视野,这项新技术据信有可能彻底改变整个社会。 区块链有望对每个行业产生颠覆的影响,包括但不限于 IT、金融、政府、媒体、医疗、法律和艺术等。一个流派将区…

速盾:防御ddos攻击的几大有效方法是什么?

DDoS攻击(分布式拒绝服务攻击)是一种恶意攻击手段,旨在通过向目标服务器发送大量的请求,使其无法正常响应正常用户的请求。这种攻击会耗尽服务器的带宽和资源,导致服务不可用。为了保护网络安全,防御DDoS攻…

线性代数 -- 矩阵求导

Tips:本文为理解神经网络的前置知识,整体内容并不全,相关内容还需后续进一步完善。 一、基础 1、标量、向量和矩阵 标量:只有大小,没有方向的量 向量(欧几里得向量):具有大小和方向…

Redis Desktop Manager 0.8.8.384 安装与使用详解

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storm…

深入解析多商户商城系统源码:如何开发直播商城小程序?

本篇文章,小编将深入解析多商户商城系统源码的关键技术,并详细探讨如何基于这些源码开发一个功能完善的直播商城小程序。 一、多商户商城系统源码的核心构架 多商户商城系统源码的核心在于其能够支持多个商户独立运营,但同时又在一个统一的平…

LoRA大模型微调的利器

LoRA模型是小型的Stable Diffusion模型,它们对checkpoint模型进行微小的调整。它们的体积通常是检查点模型的10到100分之一。因为体积小,效果好,所以lora模型的使用程度比较高。 这是一篇面向从未使用过LoRA模型的初学者的教程。你将了解LoR…

Linux/Ubuntu服务器 screen 安装与使用

一、screen简单介绍 在Linux系统中,screen是一个非常强大的终端仿真器,它允许用户在一个终端窗口中创建多个子窗口,每个子窗口都可以运行一个独立的会话。screen的主要特点包括: 会话分离:screen允许用户在终端会话中运…