各种Windows下面的gcc native build环境的比较
转自:http://i.rexdf.org/blog/2015/04/04/fa-xian-ge-xin-huan-jing-msys2/
最近注意到了一个新的Windows上面的模拟Linux的项目。一般来说两大主流阵营MingW与Cygwin,这两个思路各不相同。相对来说 MingW性能比较好,尽可能用WinAPI替代实现。Cygwin则是添加了一个层,利用很多dll来模拟Linux的那些syscall(典型的如 fork)。所以cygwin程序一般都是需要有cygwin的dll在path里面才可以运行。MingW缺点是很多程序没法编译,如果没有专门为 MingW设计的程序,基本上MingW是编译不出来的。Cygwin缺点是会比较慢。
另外注意一下环境变量。MingW的环境变量path转换比较简陋很多情况下会有问题。cygwin环境下面有cygpath.exe
这个工具来回转化(我就是用它hack了一下在cygwin的Mintty下面能运行调用nodejs处理博客压缩)。另外cygwin的path是Unicode的,偶尔会出现目录过深,windows资源管理器和rd /s
都删不掉的超长路径文件,rm -rf
可以在Windows下面轻易删除。
msys本来是MingW的基本shell环境,从MingW项目没落之前很久就没更新过了。
msys2是完全不同的项目。下面会详细给出参考。在此之前我们来看看各种Windows下面的gcc native build环境的比较。
在此之前提醒一下,大部分MingW系列都是官网加SourceForge.net托管二进制的模式,所以有两个主要官网.
MinGW/msys 1.0:
MinGW的官网是http://www.mingw.org/。
MingW里面自带一个msys 1.0,这个比较经典,但是太老了,如果需要gcc 3.4.4与GNU Make 3.81搭配。很多最近的github与svn checkout都会编译失败。基本上除了学习csapp以外没有任何其他用途(它与CSAPP里面例子编译结果一致)。如果要用/bin/gcc
就是msys的的古董gcc,因为MinGW的PATH里面/mingw/bin
在/bin
前面。
MingW
还算在更新从http://sourceforge.net/projects/mingw/上看最后一次更新是2014年12月。估计是某个包的补丁而已。
MinGW-w64
官网http://mingw-w64.yaxm.org,二进制文件官网http://sourceforge.net/projects/mingw-w64/。
应该是MinGW的后续了。一个典型的下载目录是http://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/4.9.2/threads-win32/seh/,这样的结构。理论上应该更新最好的,是从Linux版本的MinGW编译出的Windows版本。这个是目前正规血统的MinGW项目,虽然是构建Windows的exe和dll文件,但是它能力最大发挥在Linux平台上。支持win7/8/8.1的API。被ffmpeg,GTK+,OpenSSL,wxWidgets,Perl,phreads,KDE Software Collection,GIMP,Blender,The R Project for Statistical Computing等项目所使用。但是Windows版本各种bug吧。
MinGW-builds
被废弃的官网https://code.google.com/p/mingw-builds/.
二进制文件官网http://sourceforge.net/projects/mingwbuilds/.
似乎是俄罗斯人开发的,目前似乎停止开发了,已有的发行版gcc 4.6.2-4.8.1。一些feature如下(我也不懂直接复制了)。
OpenMP
LTO
Graphite
std Thread support library
std Atomic operations library
Native TLS Callbacks
Wide-Character Startup (-municode)
32-bit and 64-bit Windows
Multilib toolchains
Cross-compiling from x86_64 for i686 and vice versa
Win-builds
它需要依附在MinGW或者Cygwin的shell环境下,Linux下也有一个版本。最新是4.8.3版本。
这个比较稳定,其集成了Qt, Curl, EFL, freetype, GTK+, lua, openssl, sqlite, wget, zlib…等等92个库。支持Windows和Linux,感觉如果是做开发,这个好像是个不错的选择。
tdm-gcc
官网是http://tdm-gcc.tdragon.net/.
这个还是比较个性和实用的选择。它默认选用的posix,这个可能会引起一些问题。但是wxWidgets官网推荐的编译器就是它,另外一部分人喜欢的Dev-CPP的后续开发版本orwelldevcpp也是用的它。可见其定制还是有一定合理性的。
更新较快最新已经更新到4.9.2了。
Cygwin
这个不用在这里多说,社区很活跃,发邮件很快就有人回复。软件更新也很频繁。这里说下mirror,除了163等。阿里也有mirror,http://mirrors.aliyun.com/,速度会比较快。但是注意,添加mirror有技巧。首先复制的目录应该是http://mirrors.aliyun.com/cygwin
不能带最后的那个/
,其次添加之后需要首先随手点击一下其他的,然后再点击刚刚添加的阿里才可以,手动换其他的源也是这样。
msys2
官网http://msys2.github.io 可能在目前github的一系列事件有关,国内没法直接打开.二进制文件官网http://sourceforge.net/projects/msys2/.
一个简介.
两个关键的github repo:
https://github.com/Alexpux/MSYS2-packages
https://github.com/Alexpux/MINGW-packages
如果想自己从源码编译可以用他的patch。实际上SourceForge.net上面的就是用他的patch编译出来的。
另外就是它采用了我最喜欢的ArchLinux的pacman -Syu
。简直棒到不行。但是略微有点小问题就是需要rebase,还好它比cygwin自动化一些,直接执行根目录里面的autorebase.bat
即可。
我发现他的github里面有很多在所有其他地方没见过的包,比如nodejs(nodejs官网的win版本在cygwin的shell下面会找不到正确的目录,直接拒绝执行,这会导致很多需要用nodejs的命令行项目无法编译以及使用)。
一个国内的二进制mirror: MSYS2 镜像使用帮助.
MSYS2 镜像使用帮助
-
MINGW: i686, x86_64
-
MSYS: i686, x86_64
获取基本组件包
pacman 的配置
编辑 /etc/pacman.d/mirrorlist.mingw32
,在文件开头添加:
Server = http://mirrors.ustc.edu.cn/msys2/REPOS/MINGW/i686
编辑 /etc/pacman.d/mirrorlist.mingw64
,在文件开头添加:
Server = http://mirrors.ustc.edu.cn/msys2/REPOS/MINGW/x86_64
编辑 /etc/pacman.d/mirrorlist.msys
,在文件开头添加:
Server = http://mirrors.ustc.edu.cn/msys2/REPOS/MSYS2/$arch
然后执行 pacman -Sy
刷新软件包数据即可。
结束语
最后说一下国人据说很有前途的flinux的包管理也是基于pacman的,看来大家都是比较喜欢pacman
的了。
posted on 2015-09-03 22:11 zhangyz017 阅读(2092) 评论(0) 编辑 收藏 举报