本文来自依云's Blog,转载请注明。
今天再一次在 yaourt 的输出中瞥见 mingw 这几个字符,好奇地看了下说明:A C and C++ cross-compilers for building Windows executables on Linux
。这个不就是传说中的交叉编译器么?
试试看。以前自己在虚拟机里为 Windows 编译过很多次的 vim,要是能弄到真机下来编译效率应该会高很多。(不,我不是说虚拟机的性能差,而是 Windows 下跑 mingw 这种一堆进程的东西效率差。)
说干就干,几十 M 的 mingw-gcc 及其依赖下好,git archive all|tar x -C ~tmp/vim
弄份崭新的 vim 源码,把以前在 win 下用的Make_ming.mak
拷过来改改,设置CROSS=yes
什么的,然后开始编译!然后很快就出错了,找不到编译器i586-pc-mingw32msvc-gcc
。唔,我确实没有那个东东,只有i486-mingw-gcc
,去把CROSS_COMPILE
这个变量改了就好。然后再 make。这一次的结局是——找不到 Python/Ruby/Lua 的头文件、找不到它们中的符号……好吧,你这交叉编译器当然找不到它们,先注释掉好了。然后重新编译,很顺利地出来个 gvim.exe 了~拿到 Windows 虚拟机里跑一下,一切正常~
好开心,第一次玩交叉编译就成功了。不过还有些小遗憾:没有那些外部脚本语言的支持。这可怎么办呢?我上哪儿找用于交叉编译的库呢?光想是没有用的,还是得尝试。用 Linux 版的库肯定不行,那就试试 Windows 版的。先拿 Python 3 支持测试。把 Windows 下安装的 Python 3 文件夹复制过来,修改下路径,再 make。很正常地,我的第一次尝试总是不成功,好在也不是大问题:Make_ming.mak
里写的 include 目录不对:
ifeq ($(CROSS),no) PYTHON3INC=-I $(PYTHON3)/include else PYTHON3INC=-I $(PYTHON3)/win32inc endif
看看自己的 Python 3 目录,这里的win32inc
应该是include
。改改就好了 ;-)
嗯,顺利成功了!接下来,把 Windows 版的 Ruby 和 Lua 也弄过来就不用再跑到虚拟机里去编译 Windows 版的 Vim 了!嗯,NSIS 也有 Linux 版,虽然是在 AUR 里。
最后,编译好的 gvim 还是在这里。
Oct 31, 2011 10:57:29 PM
沙发啊~沙发
话说你为啥要编译win下的vim呢?
Oct 31, 2011 11:14:51 PM
因为 Linux 下的太简单了 ;-)
Oct 31, 2011 11:37:48 PM
"不,我不是说虚拟机的性能差,而是 Windows 下跑 mingw 这种一堆进程的东西效率差。"
何解?
Oct 31, 2011 11:45:38 PM
Windows 下编译非常耗时。
Nov 01, 2011 12:01:39 AM
哦~
Nov 02, 2011 01:10:47 PM
话说能否出个x64位的,我在win7中到是有vs2010的绿色编译包,但一直不知如何将那些补丁打上,应该是我不得法,搜索到的方法却一直没成功!
Nov 02, 2011 04:24:33 PM
你直接 clone 我这个仓库,使用 all 分支即可: https://github.com/lilydjwg/myvimsrc
准备64位环境太麻烦了我就不弄了。
Nov 02, 2011 05:25:31 PM
其实你说的应该是linux环境下win的交叉工具链,这个编译下就应该就可以!
Nov 04, 2011 03:39:13 PM
交叉编译其实是跟很神的东西,不过在 native compile 面前一切都是浮云。
由于工作原因,ARM 交叉编译,我们用了太多年了,但是慢慢地我们体会到,什么样的编译也比不上有一台 native 的 强悍的 ARM 机器直接用于编译更爽,至少 native 编译使你的编译脚本相对美观干净得多。
编译 Windows 版本 gvim 的话,目前我知道的最简单方式仍然是直接用 Make_cyg.mak 。这个方式相当于在 cygwin 里面忽略所有 cygwin 库而是直接调用 mingw 进行编译与链接,因此生成的是原生 Windows 程序。
Nov 04, 2011 03:45:53 PM
反正编译脚本不是我写的,也不用我维护。相对于虚拟机的麻烦以及在Windows里玩 mingw 的低效来说,我还是交叉编译 Win 版 vim 比较好一些。
Make_cyg.mak 那个我没能成功,我的 Cygwin 提示说不再支持编译原生 Windows 程序了。。。
Nov 07, 2011 09:53:31 AM
第一次看到在linux编译win程序
Nov 08, 2011 04:09:42 PM
do you play G+? lilydjwg?
Nov 08, 2011 04:52:43 PM
Yes, but seldom.
Nov 18, 2011 03:33:11 PM
我直接从官网git中clone了原码编译了一个版本,各版本都支持了,还改了一行vim原码解决白边问题,可以看看github.com/asins/vim
Apr 05, 2012 07:17:05 PM
嗯,mingw 编译起来简直是龟速。。。
Jun 03, 2012 11:43:11 AM
有点意思