Windows的c/c++编译器

一、背景

说到编译器,这可是一个大的领域,因为平时不怎么关注,但其实编译器是和runtime范围差不多的一个大概念,之前一直不怎么关注,最近有时间,再多了解一下

  • 以前有一个叫林纳斯的人,写了一个内核(注意只是内核),叫做Linux内核
  • 以前有一个组织,想让大家都自由的使用软件,提出了一个项目,叫做GNU项目

GPT这么回答其关系:

GNU和Linux是两个不同的项目,但它们之间有着密切的关系。

GNU是一个自由软件项目,旨在创建一个完全自由的操作系统。该项目始于1983年,由理查德·斯托曼(Richard Stallman)发起。GNU项目的目标是创建一个完全自由的操作系统,其中所有的软件都是自由软件,用户可以自由地使用、复制、分发和修改它们。

Linux是一个操作系统内核,最初由芬兰的林纳斯·托瓦兹(Linus Torvalds)开发。Linux内核最初是为个人电脑开发的,但现在已经被广泛用于服务器、移动设备和嵌入式系统等领域。

GNU项目一直在开发自己的操作系统,但是缺少一个内核。1991年,Linus Torvalds发布了Linux内核,这为GNU项目提供了一个完整的操作系统所需的内核。因此,GNU项目和Linux内核结合在一起,形成了现在广泛使用的GNU/Linux操作系统。

虽然Linux内核是GNU/Linux操作系统的核心,但是GNU项目也为该操作系统提供了许多其他的组件,如GNU C编译器、GNU Bash shell、GNU Coreutils等。因此,GNU和Linux是两个不同的项目,但它们之间有着密切的关系,共同构成了GNU/Linux操作系统。

所以就是,这些事情都和Windows没什么关系,所以最早编译软件的工具的作者,就是GNU(GNU是一整套软件的总称,包括gcc,g++,gdb,等等),最早的操作系统,就是基于Linux内核

得出结论:最早的c++源文件就是在Linux环境下,使用GNU的工具编译的

二、Windows登场了

1. MSVC

微软写了Windows操作系统,同时也要为操作系统写编译器,这个编译器叫做MSVC,是集成在visual studio中使用的,而vs studio又大,又没必要使用IDE,所以大家不想在IDE的环境下开发时,怎么办?就没有办法使用MSVC了嘛

不是的。既然GNU那一套能在Linux下使用,那能不能改一改,在Windows下也是用gcc编译器,代替MSVC呢?当然可以。

其实,我们也是可以单独下载msvc的工具链的,地址是:https://visualstudio.microsoft.com/zh-hans/visual-cpp-build-tools/,虽然名字叫做Microsoft C++ 生成工具,但是下载后执行,本质上还是在安装VS IDE,如果不勾选C++开发组件,系统依旧找不到编译器,这个也可以在https://visualstudio.microsoft.com/zh-hans/downloads/下面的地方找到,只不过藏得比较深,一般不太容易发现,目前还不知道这个下载与直接下载IDE有什么区别。


补充:这个确实不会主动安装IDE,但是占用空间也不小,选择c++开发的工作负荷后,下面的可选是需要选择的,要不然会找不到cl编译器,如图:


点击这个的启动,自动启动的是ms的cmd,当然也在Windows下安装了不少命令行,如果没有主动添加环境变量,应该只能从微软的命令行才能使用cl编译器。

安装后,一定要检查自己的安装目录下有没有路径E:\vs tools\VC\Tools\MSVC\14.39.33519\bin\Hostx64\x64,有这个路径才算做有了ms的c++编译器等工具,这个路径默认不在环境变量中,但是从VS的命令行可以找到,官方不建议自己添加路径,如果想添加就添加这个。

2. GCC(MinGW)

MinGW(Minimalist GNU for Windows),是gcc在Windows上的移植,分为:

  • mingw-32
  • mingw-64

目前32和64分家,没有人用32了,大家说的一般就是mingw-64,也会有人由此说到msys2

  1. mingw-64

而本来的mingw-64又有一个问题,就是官方的release太久不更新,导致目前的gcc还是8.1.0
官网:https://sourceforge.net/projects/mingw-w64/files/,所以这个链接也基本没人去下载,但是好像有一个GitHub,https://github.com/niXman/mingw-builds-binaries,在分发这个二进制,看了看还挺新的

  1. msys2

搜索mingw-64。进入官网,会发现在下载界面比较乱,链接:https://www.mingw-w64.org/downloads/,这是因为…,算了,我也搞不懂为什么搞得这么麻烦(可能是别的平台交叉编译win的产物吧),大家有兴趣在官网找找原因,总之是为各个环境都发行了二进制,里面就有一个瞩目的msys2

wiki上这么说:

此外,MinGW的一个被称为MSYS(最小系统)的组件提供了一个轻量级类Unix shell环境的Windows端口,包括rxvt和一些足以使autoconf脚本运行的POSIX工具[5],但它不提供C编译器或区分大小写的文件系统[6]。

除此之外,还有w64devkit、MingW-W64-builds、WinLibs.com可以注意一下,或者尝试一下

单独说一下msys2,其实还有一个msys,但是因为一直不更新,所以2和1也分家了

Clang+LLVM

说起clang,就会联想到llvm,这2个概念的关系,其实是clang作为编译器前端,将类C语言接入到llvm的后端上,后面的事情由llvm编译为机器码。而llvm是一个很大的编译器项目,其他语言不需要clang这样的工具也可以直接使用llvm进行编译。

网上查询一些博客,发现其实clang没有提供c/c++的标准库,本质上需要借用msvc或者gnu的标准库,所以需要主动配置。msvc就不提了,经过上面的验证,只能在VS的powershell中运行clang,而因为我之前已经将mingw/bin添加到了环境中,所以我猜测我的clang直接寻找了mingw的标准库,所以可以顺利编译通过。

clang++和clang,就像g++和gcc的关系。

相关链接:

三、mingw,msys2,cygwin的关系

上面的提到的这些工具,其实是有一定关系的,要不然容易乱

      cygwin(大而全) <------> msys2(小而精)
         |                         |
           |                     |
              |               |
                  |       |
            mingw-64(只有库,无shell等)

msys2和cygwin

  • cygwin是为了在win模拟一个linux的环境,所以cygwin很大很全
  • 而msys2走了相反的路线,试图达到最小最精简的效果(msys2有些东西继承自cygwin)

mingw和msys2

其实msys2里面可以安装mingw-64,所以:

msys2 = mingw-64 + shell + 其他

  • mingw编译的产物的原生的win,不依赖其他的

但各有优劣:

  1. msys2编译的产物,依赖于msys.dll(一个库),所以编译产物给其他人,别人没有这个库的话,就无法运行二进制文件
  2. mingw不包含shell终端,更加接近win,所以编译产物也不需要借助其他的库

mingw和cygwin

  • mingw本质上也就是cygwin下面的一个软件包,所以也一样没有shell环境等
  • 16
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在VScode中安装C/C++编译器,请按照以下步骤进行操作: 1. 首先,你需要下载并安装VScode编辑器。你可以从官方网站上找到适用于你的操作系统的安装包,并按照安装向导完成安装过程。 2. 下载和安装C/C++编译器。在Windows上,你可以选择MinGW或者MSVC作为编译器。MinGW是一个开源的GNU编译器集合,而MSVC是微软的Visual C++编译器。你可以根据个人偏好选择其中一个。 3. 设置环境变量。在Windows上,你需要将编译器的安装路径添加到系统的环境变量中。这样系统才能找到编译器的执行文件。你可以在系统的"高级系统设置"中找到"环境变量"选项,然后在"系统变量"中找到"Path"变量,并将编译器的安装路径添加到变量的值中。 4. 在VScode中安装C/C++相关的插件。打开VScode,点击左侧的扩展图标,搜索并安装"C/C++"插件。安装完成后,你就可以使用VScode来编写和调试C/C++代码了。 在这个过程中,如果你遇到了头文件找不到的问题,可以按照以下方法解决: 1. 点击"Alt+F8"快捷键,进入到"C/C++"扩展的配置页面。 2. 在"IntelliSense配置"下选择"c_cpp_properties.json"。 3. 在"includePath"字段下添加头文件的路径。你可以使用终端命令"g -v -E -x c"来获取头文件的路径,并将路径复制到"includePath"字段中。 如果你想改变编码方式以解决中文乱码问题,可以按照以下步骤进行操作: 1. 打开VScode编辑器。 2. 点击左下角的编码方式,选择"Simplified Chinese"作为编码方式。 这样,你就成功安装了C/C++编译器,并解决了可能遇到的一些问题。祝你编写愉快!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值