• Windows 下的 Linux环境


    概述

    主要是两个派系:mingw和cygwin
    mingw:看官网就可以知道是干啥的了“GCC for Windows 64 & 32 bits”,也就是说mingw只是在Windows下把gcc(及其相关)编译出来(实际上mingw也移植了一些其他工具到Windows上)

    cygwin:cygwin则是给让很多Linux可以用的工具软件在Windows上用,但是它依赖一个cygwin1.dll(把Windows api包装成linux api)

    简单总结:
    cygwin编译得到的程序需要依赖cygwin的dll才能运行。
    mingw编译的到得程序在win32下直接可以运行。

    原理:
    cygwin是做了一层系统api的包装,转换win api成unix api,这些api就在cygwin1.dll中。所以编译器和程序调用不知道自己在unix环境下还是win环境下。
    mingw则是修改了编译器,gcc但凡是要去调用unix api的地方都做了转换,去调用win api。所以mingw编译得到的exe可以直接在win环境里运行。

    历史演变

    主要是mingw:
    mingw32(msys) -> mingw64 -> msys2
    最早是mingw32,因为不支持64位系统后来出了mingw64,再后来因为更新拖沓,又有一些人fork了mingw64做了更新的msys2.
    msys2更像是集成了mingw32、mingw64、cygwin的优点的东西,后边细讲。

    cygwin则是并没有这么复杂的演变。

    各安装目录

    mingw系:

    为什么还有git?因为git实际上是一个命令行工具,而为了方便git直接给了我们一个mingw64的环境,里面附带了一些linux下常用的工具。所以这里的git也算mingw64.
    mingw32、mingw64的安装目录下,都有个bin文件夹,这里是一些linux里的工具,都是exe结尾。

    例如上图的gcc,我们就可以用它来编译c代码,得到的EXE可以直接在Windows任意地方运行。

    但是编译器不只有gcc,还有clang等其他,mingw64这里是没有的,而且mingw64安装软件也略麻烦。

    msys2刚好解决了上述所有问题,msys2支持这么多:

    cygwin:

    cygwin最大的特点是完整的linux api封装,基本上在这里能跑的代码,换到linux上直接编译就可以。但是有个问题,那就是任何用cygwin的编译器得到的exe,都要依赖于cygwin1.dll这个文件,因为api的封装就在这里。

    单独说下msys2

    安装完之后有这么多入口

    分别对应的进入不同的编译系列,msys2支持如下这些编译系统

    怎么选

    首选msys2

    怎么安装特定版本gcc

    mingw64


    msys2

    可以去他的仓库下载不同版本的msys2,每年都会发布几个msys2版本,每个版本对应的gcc版本是不一样的


    两类软件

    终端模拟器

    毕竟已经是gui操作系统,在没有gui的时代的那种命令行终端都是gui模拟出来的,powershell ,windows terminal ,mintty,cmder都是终端模拟器。
    mingw32、mingw64、cygwin默认用的都是mintty,这个性能还是很好的。
    mintty的配置文件在 ~/.minttyrc

    Columns=150
    Rows=50
    FontHeight=14
    
    Font=Consolas
    Term=xterm-256color
    Scrollbar=none
    AllowBlinking=yes
    
    ForegroundColour=171,178,191
    BackgroundColour=30,33,39
    CursorColour=97,175,239
    BoldBlack=92,99,112
    Black=92,99,112
    BoldRed=224,108,117
    Red=224,108,117
    BoldGreen=152,195,121
    Green=152,195,121
    BoldYellow=209,154,102
    Yellow=209,154,102
    BoldBlue=97,175,239
    Blue=97,175,239
    BoldMagenta=198,120,221
    Magenta=198,120,221
    BoldCyan=86,182,194
    Cyan=86,182,194
    BoldWhite=171,178,191
    White=171,178,191
    BoldAsFont=yes
    CursorType=block
    ThemeFile=nord
    

    unix shell

    是一个命令行解释器,为Unix操作系统和Unix的系统提供传统的用户界面(命令行界面)。 用户通过输入命令行以获取命令行解释器的文本来指导计算机的操作或通过创建一个或多个此类命令的文本脚本。
    bash、zsh、sh等都是一些shell,多数linux默认是bash。

    一些特性

    除了git,mingw和cygwin默认都不是Windows系统全局的环境变量,私有化更安全,毕竟装好几个这样的环境,如果都是全局环境变量,调用gcc的时候怎么确定是你想要的那个。

  • 相关阅读:
    jquery动画,获取,添加
    javac3p0连接池
    jquery尺寸
    jquery遍历
    jquery删除,停止,获取设置css,设置内容和属性,过滤
    javajdbc(数据库的添加,删除,修改,更新)
    博客开通
    很久每有来空来了,一些最近的想法
    竖线的显示
    一个小问题,c++
  • 原文地址:https://www.cnblogs.com/feipeng8848/p/14868568.html
Copyright © 2020-2023  润新知