Windows下VS2012编译安装Ruby 2.1.1(64位版)

虽然学过一段时间的Python,但是决心转投Ruby玩玩看,Ruby也有GTK+和Qt的扩展(还有KDE的API绑定呢!)。Linux下安装是so easy了,Windows下也有懒人安装包,不过版本比较老。所以我打算用VS2012编译安装最新的稳定版本2.1.1,下面就讲讲Windows下的编译安装过程(以编译安装64位版本为例)。

准备工作

Ruby依赖了一些第三方的类库,这里我打算先安装好ZlibOpenSSL,其它的Tcl/Tk什么的就不要了(GUI可以用GTK+和Qt,比Tk漂亮多了)。

这些第三方类库我打算放在一起,新建一个文件夹C:\3rd_party(你也可以放在别的地方,但文件夹路径一定不要有空格和中文字符等),在3rd_party下新建bin、lib、include这三个文件夹。并修改系统环境变量,Path添加C:\3rd_party\bin,LIB(没有则新建)添加C:\3rd_party\lib,INCLUDE添加C:\3rd_party\include(Windows系统变量值用半角的分号隔开)。

编译OpenSSL需要安装好Perl。Perl安装ActivePerl比较省力气(下载64位版本)。

提示:修改系统环境变量可能需要重新启动计算机才能生效。

Zlib

打开Microsoft Visual Studio 2012 -> Visual Studio Tools -> 打开 VS2012 x64 本机工具命令提示(在开始菜单里),下面的命令行操作均在VS2012的命令提示下完成,都需要先切换到对应的源码目录。

nmake -f win32/Makefile.msc AS=ml64 LOC="-DASMV -DASMINF -I." OBJA="inffasx64.obj gvmat64.obj inffas8664.obj"

参数说明可以用Notepad++打开win32/Makefile.msc看看,这段命令编译的是64位版的zlib。

把zdll.lib、zdll.exp、zlib.lib、zlib.pdb、zlib1.pdb复制到C:\3rd_party\lib下,zlib1.dll复制到C:\3rd_party\bin下,zlib.h、zconf.h复制到C:\3rd_party\include下(.pdb可以不复制,但是对于调用了zlib的程序出错时的调试有用)。

OpenSSL

关闭再重新打开上面的VS2012 x64命令提示(以便加载刚刚安装的Zlib)。

perl Configure VC-WIN64A --prefix="C:/3rd_party"
ms\do_win64a.bat
nmake -f ms\ntdll.mak
cd out32dll
..\ms\test.bat
cd ..
nmake -f ms\ntdll.mak install

没问题的话就能顺利编译完成并安装到C:\3rd_party下了。

编译安装Ruby

关闭再重新打开上面的VS2012 x64命令提示(以便加载刚刚安装的OpenSSL)。

win32\configure.bat --target=x64-mswin64 --prefix="C:/Ruby"
nmake
nmake test
nmake install

–target=x64-mswin64指定编译的是64位版,如果不指定–target参数的话默认编译的是32位版本,–prefix指定的是安装目标(不能有空格或者其他非法字符,最好只有英文字母和下划线),当然也可以在nmake install时用DESTDIR参数指定安装位置(详见win32\README.win32)。

按照本文的过程,dbm、fiddle、gdbm、pty、readline、syslog、tcl/tk都会提示Failed to configure. It will not be installed.(因为一些第三方依赖没有安装),不影响核心的Ruby功能(有兴趣的可以去折腾一下Fiddle的安装,依赖libffi)。

最后安装完成,记得在系统变量里把C:\Ruby\bin加入到Path中。

值得提醒的是,编译安装这些软件一定要使用同一套编译器(比如全部都是MSVC2012 x64,或者全部都是MinGW GCC),混搭就会出错。包括之后的插件编译,也必须用同样的编译器。

Ruby/Gem等运行过程中,可以忽略掉警告“DL is deprecated, please use Fiddle.”

参考文章:【工作点滴】用VS 2010 编译 Ruby 1.9.1 (Ruby 2.1.1在Windows/MSVC下的编译已经非常顺畅了,不需要再像参考文章中各种打补丁改源码了)

Author: librehat

自由軟體萬歲!

6 thoughts on “Windows下VS2012编译安装Ruby 2.1.1(64位版)”

  1. 请问我用vs2012编译ruby2.2遇到fiber直接报错编译停止:
    fiddle.c(233) : error C2065: “SIGNEDNESS_OF_SIZE_T”: 未声明的标识符
    有什么办法解决呢?

      1. 哎,我现在要做一个嵌入Ruby解释器到C++里面的东西,不用VS的话MinGW很麻烦,所以想自己编译一个lib,但是各种出问题。

        1. 编译器怎么会造成麻烦呢?如果没有特别的需求,用MinGW/GCC还靠谱一些,VS编译的Ruby,用gem安装不少包都会有编译问题。
          话说还不如用Linux搞Ruby开发,Windows下实在作孽啊

  2. 在XP SP3的环境下,按照这样进行编译后,
    在CMD中输入 gem install bundler 时,报 不能找到程序 socket.so 但在对应的目录下,能够找到这个文件,不知道你有没有遇到这个问题?

Comments are closed.