参考了这个英文网站: MSYS2 development environment for Windows
http://www.davidegrayson.com/windev/msys2/


最近刚接触 msys2 遇到两类开发环境:

(一) MSYS2 自带的开发环境,安装的包叫 msys2-devel

在 MSYS2 shell 下,可以通过 pacman 命令查询和安装

1)查询,可以看到包含 gcc

$ pacman -S msys2-devel
:: 共有 6 组员在组 msys2-devel 中:
:: 软件库 msys1) binutils  2) cocom  3) gcc  4) gcc-fortran  5) msys2-w32api-headers6) msys2-w32api-runtime

2)安装

pacman -S msys2-devel

(二)MinGW-w64 的

安装

$ pacman -S mingw-w64-x86_64-toolchain
:: 共有 17 组员在组 mingw-w64-x86_64-toolchain 中:
:: 软件库 mingw641) mingw-w64-x86_64-binutils2) mingw-w64-x86_64-crt-git3) mingw-w64-x86_64-gcc4) mingw-w64-x86_64-gcc-ada5) mingw-w64-x86_64-gcc-fortran6) mingw-w64-x86_64-gcc-libgfortran7) mingw-w64-x86_64-gcc-libs8) mingw-w64-x86_64-gcc-objc9) mingw-w64-x86_64-gdb10) mingw-w64-x86_64-headers-git11) mingw-w64-x86_64-libmangle-git12) mingw-w64-x86_64-libwinpthread-git13) mingw-w64-x86_64-make14) mingw-w64-x86_64-pkg-config15) mingw-w64-x86_64-tools-git16) mingw-w64-x86_64-winpthreads-git17) mingw-w64-x86_64-winstorecompat-git

可以看到,也有gcc.


运行不同的 shell,则执行对应版本的 gcc.

(图中第一个 shell 是 MinGW 32-bit 版本的,类似于 64-bit 版本的)


那么,这两者有什么区别呢?

一言以蔽之,前者编译出来的可执行文件,要依赖 MSYS2 提供的动态链接库,而后者不需要。下面详细说明一下:
(一) MSYS2 下的 gcc 编译环境,编译的可执行文件要依赖于 msys-2.0.dll,这个 DLL 提供了 Linux 下编程的提供的函数和接口,例如 fork 函数。
这个编译环境对于编译基于 Linux 下编写的软件,是非常适合的。例如编译 GNU 提供的各种工具。例如,你想编译最新版本的 GNU grep 工具,MSYS2 下的这个环境是非常适合的。
这个环境非常类似于 cygwin.
一个简单的 hello world 程序:

#include <stdio.h>
void main()
{printf("Hello world !\n");
}

编译出来的 a.exe, 用 dumpbin (这个是visual studio 提供的工具,当然,你也可以安装 Dependency Walker 这个独立小巧的工具来看)来查看 DLL 依赖关系:

d:\hello_world> dumpbin /dependents a.exe

看到:

Microsoft (R) COFF/PE Dumper Version 9.00.21022.08
Copyright (C) Microsoft Corporation.  All rights reserved.Dump of file a.exeFile Type: EXECUTABLE IMAGEImage has the following dependencies:msys-2.0.dllKERNEL32.dll

其中依赖了 msys-2.0.dll. (KERNEL32.dll 是 windows 提供的)。

在 windows 的 cmd 下直接运行,如果没有把 msys-2.0.dll 的路径告知的话,则会运行不成功。

(二)用 MinGW64 的编译环境,得到 a_mingw.exe

d:\hello_world>dumpbin /dependents a_mingw.exe

看到

Microsoft (R) COFF/PE Dumper Version 9.00.21022.08
Copyright (C) Microsoft Corporation.  All rights reserved.Dump of file a_mingw.exeFile Type: EXECUTABLE IMAGEImage has the following dependencies:KERNEL32.dllmsvcrt.dll

不再依赖于 msys-2.0.dll,上面两个 dll 都是 windows 提供的。

所以,如果源代码就是基于 windows 开发的,那使用 MinGW 的编译环境比较好,编译出来的可执行文件,不用再依赖 MSYS 提供的动态链接库。当然,前提是代码中不能使用 Linux 的东西,即 POSIX 的那套东西。

备注:

msvcrt.dll 提供的接口,可以参考 C Run-Time Library Reference

MSYS2 在 windows 上的开发环境相关推荐

  1. win集成linux开发环境,在 Windows 10 上创建开发环境 | Microsoft Docs

    在 Windows 10 上设置开发环境Set up your development environment on Windows 10 07/24/2020 本文内容 本指南将帮助你开始安装和设置 ...

  2. MAC上搭建Windows Phone 8 开发环境——VMware Fusion下Win8 “无法安装Hyper-V, 某个虚拟机监控程序正在运行”问题解决的办法

    最近在试着在mac os上搭建Windows Phone 8的开发调试环境,使用的是VMware Fusion + Win8.1的虚拟环境. 点开VS2013, new 了一个helloWorld, ...

  3. Windows上python开发--2安装django框架

    Windows上python开发--2安装django框架 分类: 服务器后台开发2014-05-17 21:22 2310人阅读 评论(2) 收藏 举报 python django 上一篇文章中讲了 ...

  4. WWF(Windows Workflow Foundation)开发环境的建立。 .NET 技术前瞻,WWF,Windows,Workflow,Foundation...

    1.安装WindowsSDK for Vista,有1.14G之巨,可以从MS的网站上下载,不过需要验证WINDOWS,可以去讯雷区用WindowsSDK为关键字搜索下载. 2.安装Virsul St ...

  5. QT + OpenCV + MinGW 在windows下配置开发环境

           由于研究项目需要,最近开始接触C++界面设计,关于"QT + OpenCV + MinGW在windows下配置开发环境"着实让人头疼,单次配置时间相当长,也十分不容 ...

  6. Windows下Android开发环境搭建和配置

    关于Windows下Android开发环境搭建.配置方面文章,网上一搜一堆,为方便以后参考,权且做个记录,主要关注安装过程中的注意事项.对新手提醒的是,本文介绍SDK开发Android APK环境搭建 ...

  7. Windows 2008 R2 安装 Windows phone 7 开发环境

    Windows 2008 R2 安装 Windows phone 7 开发环境 安装环境: 1.Windows server 2008 R2 2.Visual Studio 2010 SP1 旗舰版 ...

  8. 在windows上混合开发_什么是Windows 10上的混合现实,您应该购买耳机吗?

    在windows上混合开发 Microsoft is building an ecosystem of "Mixed Reality" headsets from various ...

  9. Windows 10 IoT Serials 1 - 针对Minnow Board MAX的Windows 10 IoT开发环境搭建

    目前,微软针对Windows IoT计划支持的硬件包括树莓派2,Minnow Board MAX 和Galileo (Gen 1和Gen 2).其中,Galileo (Gen 1和Gen 2)运行的是 ...

最新文章

  1. 为什么要参加java培训?有哪些优势?
  2. Science:细菌和古菌多重抗性系统抵御噬菌体和外来质粒
  3. 雀姬 服务器维护,《雀姬》功能界面介绍(多图)
  4. 天津大学张梅山老师要招NLP方向的研究生啦!
  5. 反射xss 测试地址_使用反射进行测试
  6. Hive集成Mysql作为元数据时,提示错误:Specified key was too long; max key length is 767 bytes...
  7. 梯度下降优化算法总结
  8. zabbix 5.0所有依赖包_一杯茶的时间,上手Zabbix
  9. 网易云api如何调用_谈谈网易云如何快速升级
  10. [Oracle] SQL*Loader 详细使用教程(5)- 典型例子
  11. CentOS 6系统FreeSwitch和RTMP服务 安装及演示(一)
  12. ios tabbar中间凸起_移动端开发基础【21】tabBar 配置
  13. 速达3000怎么找不到服务器,速达软件服务器无法启动怎么办?
  14. Bitdefender 发布GandCrab V5.2勒索病毒解密工具
  15. 在前端的js中设置按钮的可见与不可见
  16. java tld_Java Web自定义标签tld文件的简单使用
  17. Procreate插画基础网课培训平台有哪些
  18. 感知器算法(perceptron algorithm)
  19. 聊一聊Spring中@Transactional注解及其失效的七种场景
  20. 罗克韦尔自动化启用位于硅谷的新建电动汽车创新中心

热门文章

  1. 使用阿里云短信服务做手机找回密码功能
  2. 尤里复仇退出界面_win7系统下红警2尤里的复仇如何改成窗口化运行
  3. rust墙体_《Rust》全武器道具对建筑伤害一览
  4. 计算机软考证书对找工作有帮助吗?
  5. 精彩的一期,龌龊的一期
  6. Python编程从入门到实践-读书心得
  7. 互联网摸鱼日报(2023-04-15)
  8. 垒骰子(递归和动态规划)
  9. 作为K12教育领头羊,掌门1对1如何做好带头大哥?
  10. LoadRunner12 调用javascript脚本