C/C++ 常见编译器说明

news2024/12/27 11:55:59

文章目录

  • window下常用的编译器
    • 如何获取MSVC
    • MinGW
  • Linux和MaxOS下的编译器
    • gcc和g++的区别

window下常用的编译器

  1. window下并不提供原生的类似gcc/g++的类unix系统下的C/C++编译器。常用的是 MSVC(Microsoft Visual C/C++)编译器,在我们安装完visual studio 2019后,会在 D:\software\visual_studio_2019\IDE\VC\Tools\MSVC\14.29.30133\bin目录下看到Hostx64和Hostx86这两个目录。Hostx64目录下有x64和x86两个目录。Hostx86目录下也有x64和x86两个目录。这里的Hostx64和Hostx86分别表示编译器软件的为啥,Hostx64下的是64位的编译器,Hostx86下的是32位的编译器。其下的x64和x86又分别代码 build的应用程序 所运行的目标平台。
    2.下面以D:\software\visual_studio_2019\IDE\VC\Tools\MSVC\14.29.30133\bin\Hostx64\x64目录进行详细讲解:
    其下 最重要的两个可执行文件是 cl.exe和link.exe (即MSVC编译器工具链主要由cl.exe与link.exe构成)
    1.cl.exe用于控制在 Microsoft C/C++的编译器和链接器
    2.link.exe 将通用对象文件格式 (COFF) 对象文件和库链接起来,以创建可执行 (.exe) 文件或 动态链接库 (DLL)
    3.用户只需要调用cl.exe,即可完成编译-链接全过程。

如何获取MSVC

一般来说,获取MSVC要通过Microsoft Visual Studio来实现。对于一般的应用场景来说,我们不需要下载完整的IDE而是只需要下载单个组件下的MSVC C++ 生成工具,以及Windows 10 SDK(注意:如果主机系统是Windows 11则必须用Windows 11 SDK)即可。(MSVC C++生成工具包含了全部编译链接工具链以及大部分函数库与头文件;Windows 10 SDK只是提供其它的一些必要库文件与头文件)
在这里插入图片描述
我们想要在cmd下执行cl.exe命令,还需要配置环境变量。而使用Visual Studio 执行编译时,由IDE工具调用对应的cl.exe来编译链接,不需要我们手动干预。

MinGW

MinGW即Minimalist GNU For Windows,即为Windows系统开发的极简版的GNU, 区分32位和64位,实际上 MinGW 并不是一个 C/C++ 编译器,而是一套 GNU 工具集合。(除了包括GCC即GNU编译器集合,还包括其他的功能)里面包含gcc和g++的类Unix系统上的编译器。开发 MinGW 是为了那些不喜欢工作在 Linux(FreeBSD) 操作系统而留在 Windows 的人提供一套符合 GNU 的 GNU 工作环境。让人们在Windows系统下也可以使用gcc和g++的命令。

Linux和MaxOS下的编译器

在讲解Linux下的编译器时,先讲一个GNU的历史,GNU全称是 GNU’s Not Unix。即GNU不是Unix,我们都知道Unix是操作系统,但是GNU也是操作系统,模仿unix开发的但是它是开放自由的。但是至今也没有自己的真正内核,然而不是完整的操作系统。在实际使用上,多半使用Linux内核、FreeBSD等替代方案,作为系统核心,其中主要的操作系统是Linux的发行版。Linux操作系统包涵了Linux内核与其他自由软件项目中的GNU组件和软件,可以被称为GNU/Linux(见GNU/Linux命名争议)。
下面讲下GCC,其全称为GNU Compiler Collection,即GNU编译器集合。即GCC是GNU中的一部分。
gcc是GCC中的GNU C Compiler(C编译器);
g++是GCC中的GNU C++ Compiler(C++编译器);
事实上,虽然gcc和g++叫做xxx编译器,但它们只是一种驱动器,根据要编译的文件类型去调用对应的GNU编译器。

gcc和g++的区别

1.gcc可以编译.c文件和.cpp文件,并且gcc会区分它们,分别当作c和cpp文件编译;
2.g++也可以编译.c文件和.cpp文件,但是g++不区分它们,都当做cpp文件编译。
3.编译时,gcc和g++都可以使用,因为编译阶段时g++会调用gcc进行编译;
4.链接时,g++可以使用,gcc需要添加"-lstdc++"才可以使用,因为gcc不能自动和C++库链接,所以一般使用g++进行链接;
5.gcc在编译cpp文件时、g++在编译c文件和cpp文件时,gcc和g++调用的都是cpp文件的编译器,且会加入一些额外的宏定义,宏定义

#define __GXX_WEAK__ 1
#define __cplusplus 1
#define __DEPRECATED 1
#define __GNUG__ 4
#define __EXCEPTIONS 1
#define __private_extern__ extern

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

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

相关文章

python 获取脚本所在存储目录

获取.py文件所在目录 问题背景问题原因解决方法 问题背景 项目需要使用到当前脚本所在的目录然后保存文件 我像之前一样,使用了os.getcwd() 去获取脚本目录,保存文件,程序正常运行,但设定路径下没有任何文件,没有头脑…

读 AI学者生存策略

链接:https://arxiv.org/pdf/2304.06035.pdf 作者:Julian Togelius and Georgios N. Yannakakis 随着大模型 和 大数据的出现, AI研究者 都会感到焦虑。 没有计算资源 ,没有标注的人力,很难做出突破性的研究。即使很多…

FFmpeg 中 RTSP推流桌面和Android设备延时测试

文章目录 1. FFMPEG 推流:1.1 FFmpeg 源码准备1.2 RTSP 推流服务器 2. 执行流程2.1 启动服务器2.2 执行桌面推流2.3 播放 3. 安卓测试 1. FFMPEG 推流: 1.1 FFmpeg 源码准备 官网,GitHub,CSDN中选一个就好: ● 官网…

在线图片编辑网站汇总

目录 前言一、在线抠图工具1. 佐糖2. remove.bg3. Clipping Magic4. 起兮深深5. BgSub6. 改图神器7. PIXLR 二、其他工具1. 压缩图2. AI人工智能图片放大 前言 本文收录了多个可以在线抠图、在线编辑图片的网站。 一、在线抠图工具 1. 佐糖 官网:链接 特点&#x…

一本通 3.4.4 并查集

1346:【例4-7】亲戚(relation) 【题目描述】 或许你并不知道,你的某个朋友是你的亲戚。他可能是你的曾祖父的外公的女婿的外甥女的表姐的孙子。如果能得到完整的家谱,判断两个人是否是亲戚应该是可行的,但如果两个人的最近公共祖…

企业想注销境外投资备案应该怎么做?

我们今天就来说一下关于境外投资备案的注销,有办理的需求,当然就有注销的需求。如果您当初想去海外投资并购一家公司,因此办理了境外投资备案,但是由于种种原因可能没有办法投资下去了,那么这个时候我们就需要做境外投…

【Linux网络服务】SSH远程访问及控制

一、openssh服务器 1.1ssh协议 SSH(Secure Shell)是一种安全通道协议,主要用来实现字符界面的远程登录、远程 复制等功能; SSH 协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令&#xff1…

测试月入30K,Soeasy?测试这一行涨薪机制被我摸透了...

1.软件测试如何实现涨薪 首先涨薪并不是从8000涨到9000这种涨薪,而是从8000涨到15K加到25K的涨薪。基本上三年之内就可以实现。 如果我们只是普通的有应届毕业生或者是普通本科那我们就只能从小公司开始慢慢往上走。 有些同学想去做测试,是希望能够日…

nodejs+vue 智能餐厅菜品厨位分配管理系统

系统功能主要介绍以下几点: 本智能餐厅管理系统主要包括三大功能模块,即用户功能模块和管理员功能模块、厨房功能模块。 (1)管理员模块:系统中的核心用户是管理员,管理员登录后,通过管理员功能来…

BPF之前端工具BCC与bpftrace

BPF前端工具BCC与bpftrace 一、概述 BCC和bpftrace到底是什么,与BPF是什么关系呢? 经过上一篇的介绍,BPF是内核中的执行引擎,BCC和bpftrace则是两个前端工具,比如用户可以直接使用的命令行工具。 BCC与bpftrace又有…

Stable Diffusion Lora模型训练详细教程

1. 介绍 通过Lora小模型可以控制很多特定场景的内容生成。 但是那些模型是别人训练好的,你肯定很好奇,我也想训练一个自己的专属模型(也叫炼丹~_~)。 甚至可以训练一个专属家庭版的模型(fami…

JDK JRE JVM之间的关系

文章目录 1.从定义的角度解释JDK、JRE、JVM2、详细介绍JDK3、详细介绍JRE4、详细介绍JVM1、JVM内部区域划分 5、如何运行一个java程序? 本篇文章仅仅是个人片面观点,可能有错误或者表述不清的地方 1.从定义的角度解释JDK、JRE、JVM JDK:Java…

ArcGIS面要素最小外接矩形、外接圆的绘制方法

本文介绍在ArcMap软件中,基于一个面图层,绘制其中面要素的最小外接矩形、最小外接圆等的方法。 首先,我们来看一下本文需要实现的需求。现有一个面要素图层,其中包含多个面要素,如下图所示。我们希望绘制这个面要素图层…

【Redis】Redis十大数据类型—列表List

介绍 List列表是简单的字符串列表,按照插入顺序排序,可以从头部或尾部向List列表添加元素。 列表的最大长度是2^32-1,也就是每个列表支持超过40亿个元素。 实现 底层数据结构是由双向链表或压缩列表实现。 如果列表的元素个数小于 512 个…

Python获取某乎问答区计算机专业学生应聘保洁这一内容,看看为啥会有此事发生

前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 不知道现在还有多少人玩知某乎, 今天刷话题的时候看到这么一个问答, 这么有趣的话题,咱们就对其问答内容进行采集一下?? 效果展示 可以看到,数据…

Linux 远程访问控制 SSH SCP SFTP TCP-Wrappers

SSH&#xff08;secure shell&#xff09;协议 一种安全通道协议&#xff0c;主要用来实现字符界面的远程登录、远程复制等功能。 协议对通信双方的数据传输进行了加密处理&#xff0c;其中包括用户登录时输入的用户口令 SSH客户端<-----------------网络------------------…

android 布局优化

1.绘制和布局加载原理 本文仅供个人学习记录&#xff0c;详细介绍可查看下面链接 Android布局优化&#xff0c;多套方案全面解析 布局优化的原因&#xff1a;布局嵌套过深&#xff0c;或者其他原因导致布局渲染性能不佳&#xff0c;可能会导致应用卡顿。 android绘制原理&am…

5.3 牛顿-科茨公式

学习目标&#xff1a; 理解微积分基础知识&#xff0c;例如导数和微分的概念。学习牛顿-科茨公式的推导过程。这个公式实际上是使用泰勒公式对被积函数进行展开&#xff0c;并使用微积分的基本原理进行简化得到的。学习如何使用牛顿-科茨公式进行数值积分。这通常涉及到将被积…

Ajax超详解(新手入门指南)

文章目录 1. AJAX简介2. 前后端交互3. XHR3.1 XMLHttpRequest对象3.2 获取模拟的后端数据3.3 获取网络数据3.4 使用json-server模拟服务器3.4.1 安装node.js3.4.2 安装并使用json-server 3.5 常见的请求方式3.5.1 GET请求3.5.2 POST请求3.5.3 PUT请求3.5.4 PATCH请求3.5.5 DELE…

【图像分割】Segment Anything(Meta AI)论文解读

文章目录 摘要一、引言二、segment anything任务1.任务2.预训练3.zero shot transfer4.相关任务5.讨论 三*、Segment Anything 模型四、Segment Anything 数据引擎五、Segment Anything 数据集六、Segment Anything RAI分析七、Zero-Shot Transfer 实验1.zero shot 单点有效掩模…