Rexdf

The devil is in the Details.

发现个新环境msys2

| Comments

好久没写,发生种种暂且不表。

最近注意到了一个新的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。被ffmpegGTK+OpenSSLwxWidgetsPerlphreadsKDE Software CollectionGIMPBlenderThe 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

官网是http://win-builds.org/.

它需要依附在MinGW或者Cygwin的shell环境下,Linux下也有一个版本。最新是4.8.3版本。

这个比较稳定,其集成了Qt, Curl, EFL, freetype, GTK+, lua, openssl, sqlite, wget, zlib…等等92个库。支持Windows和Linux,感觉如果是做开发,这个好像是个不错的选择。

Win-builds

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

结束语

最后说一下国人据说很有前途的flinux的包管理也是基于pacman的,看来大家都是比较喜欢pacman的了。

Comments