2009年5月26日星期二

Build Ruby With ICC

前些日子试图用WinDDK编译Ruby失败,不过却一直惦记着。这两天突然想起,天底下除了VC和GCC,还有一个叫Intel C++ Compiler的东西,于是就试了试。

我用的ICC是v10.1.021版,虽然v11早就有了,可看起来新版本不再支持VC6了的样子,所以只好用旧版。

正常运行configure.bat,打开生成的Makefile,在最后一句include前面加上如下三行:

CC = icl
CPP = icl
LDFLAGS = -incremental:no -debug -opt:ref -opt:icf /nodefaultlib:libmmd.lib

最后一句的nodefaultlib是为了去掉对libmmd.dll的依赖,虽然据说会快一点,不过能少一个库也是好的。

编译过程没出什么问题,除了编译速度很慢很慢以外。ZLib和PDCurses用ICC重新编译过,IConv和OpenSSL则犯懒了,用的是以前VC6编译的版本,链接也都OK。

nmake test时出错,跟了一下发现是Win32API的bug。CFunc的默认调用约定是cdcel,而绝大部分Windows APIs应该用stdcall。可奇怪的是,VC6编译出来的代码,用cdcel方式调用也可以。

跑到Ruby官网上逛了一圈,发现该问题已修正,只是要下个版本才会发布。自己编译1.9.1-p120的话,还是得在编译前手工改代码。

暂时没遇到其他的问题,copy了一个用VC6编译的sqlite3_api.so,能用,ICC和VC的兼容性还蛮不错的。

benchmark没很严格地跑,随便写了一点小东西比较,比VC6编译的版本快很多,但却比MinGW(gcc 3.4)编译的略慢些,不知道算不算正常现象。我的老机器跑ICC太累,OpenMP和SSE2之类的也都用不上,先这样吧……

没有评论 :