10
31
2011
16

在 Linux 下交叉编译带 Python 3 支持的 gvim.exe

本文来自依云'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 还是在这里

Category: Vim | Tags: vim windows 交叉编译 编译 linux | Read Count: 14502
李帅 说:
Oct 31, 2011 10:57:29 PM

沙发啊~沙发
话说你为啥要编译win下的vim呢?

Avatar_small
依云 说:
Oct 31, 2011 11:14:51 PM

因为 Linux 下的太简单了 ;-)

Avatar_small
VT 说:
Oct 31, 2011 11:37:48 PM

"不,我不是说虚拟机的性能差,而是 Windows 下跑 mingw 这种一堆进程的东西效率差。"

何解?

Avatar_small
依云 说:
Oct 31, 2011 11:45:38 PM

Windows 下编译非常耗时。

asins 说:
Nov 02, 2011 01:10:47 PM

话说能否出个x64位的,我在win7中到是有vs2010的绿色编译包,但一直不知如何将那些补丁打上,应该是我不得法,搜索到的方法却一直没成功!

Avatar_small
依云 说:
Nov 02, 2011 04:24:33 PM

你直接 clone 我这个仓库,使用 all 分支即可: https://github.com/lilydjwg/myvimsrc

准备64位环境太麻烦了我就不弄了。

Avatar_small
星空™ 说:
Nov 02, 2011 05:25:31 PM

其实你说的应该是linux环境下win的交叉工具链,这个编译下就应该就可以!

poet 说:
Nov 04, 2011 03:39:13 PM

交叉编译其实是跟很神的东西,不过在 native compile 面前一切都是浮云。

由于工作原因,ARM 交叉编译,我们用了太多年了,但是慢慢地我们体会到,什么样的编译也比不上有一台 native 的 强悍的 ARM 机器直接用于编译更爽,至少 native 编译使你的编译脚本相对美观干净得多。

编译 Windows 版本 gvim 的话,目前我知道的最简单方式仍然是直接用 Make_cyg.mak 。这个方式相当于在 cygwin 里面忽略所有 cygwin 库而是直接调用 mingw 进行编译与链接,因此生成的是原生 Windows 程序。

Avatar_small
依云 说:
Nov 04, 2011 03:45:53 PM

反正编译脚本不是我写的,也不用我维护。相对于虚拟机的麻烦以及在Windows里玩 mingw 的低效来说,我还是交叉编译 Win 版 vim 比较好一些。

Make_cyg.mak 那个我没能成功,我的 Cygwin 提示说不再支持编译原生 Windows 程序了。。。

lidashuang 说:
Nov 07, 2011 09:53:31 AM

第一次看到在linux编译win程序

Avatar_small
Rykka 说:
Nov 08, 2011 04:09:42 PM

do you play G+? lilydjwg?

asins 说:
Nov 18, 2011 03:33:11 PM

我直接从官网git中clone了原码编译了一个版本,各版本都支持了,还改了一行vim原码解决白边问题,可以看看github.com/asins/vim

荒野无灯 说:
Apr 05, 2012 07:17:05 PM

嗯,mingw 编译起来简直是龟速。。。


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter

| Theme: Aeros 2.0 by TheBuckmaker.com