关键字:ruby 1.9.1 Visual studio 2010 MSVC 1600 download compile
VC 2010增加了许多对C99的支持,编译许多GNU的项目会方便许多,考虑到以后编译ruby扩展的方便,所以重新用VC 2010 (1600) 把ruby编译了一遍。
编译Ruby需要一些第三方类库,首先是Zlib,Zlib最新版本是1.2.4,编译很简单,解开之后,nmake -f .\win32\makefile.msc,编译完成之后,得到2个头文件zlib.h和zconf.h和一个library zlib.lib,将他们放到VC的目录(默认是"C:\Program Files\Microsoft Visual Studio 10.0\VC"),这其实是个偷懒的做法--:)
有了Zlib之后,就可以开始ruby的编译工作,最新的ruby版本是ruby-1.9.1-p376,这个版本需要做适当的修改才能被编译,首先要解决的是win32.h里许多errono的重定义问题,VC 1600已经定义了自己的errono,为了兼容之前的VC,打开<ruby-src>\include\ruby下的win32.h,修改成条件编译。
#if _MSC_VER <1600
#define EWOULDBLOCK WSAEWOULDBLOCK
.....
#define EREMOTE WSAEREMOTE
#endif
之后运行ruby的命令 .\win32\configure.bat --prefix="C:/ruby",之后如果直接运行nmake,会遇到C1010070 "Failed to load and parse the manifest",这是生成的makefile的bug,增加以下两行
CFLAGS = -nologo -MD $(DEBUGFLAGS) $(OPTFLAGS) $(PROCESSOR_FLAG)
LDFLAGS = $(LDFLAGS) -manifest
继续编译的话,在testThread.c会有个编译错误,将附件中的testThread.c覆盖掉Ruby原来的那个,一切就ok.
编译过程中有一个warning C4273: 'vsnprintf' : inconsistent dll,这个是因为ruby的missing.h,又定义了一个
extern int vsnprintf(char *, size_t n, char const *, va_list);
直接rem掉之后就可以继续下去了。
编译完的ruby之后并不能运行rails,因为有两个重要的lib(iconv和open ssl)没有被编译,会导致rails运行失败。
首先编译iconv,由于后续一些版本的iconv去掉了对VC的支持,所以必须寻找合适的版本,我找到的最高版本是iconv 1.11.1,足够支持rails了,编译命令用
nmake -f makefile.msvc NO_NLS=1
nmake -f makefile.msvc install
NLS是native language support,将得到的头文件和library也放到VC的目录里去。。(又一次坏习惯)。
接下来是可怕的Open SSL,OpenSSL本身对VC支持得很好,问题出在ruby身上,几个作者搞了一整年,还是没办法兼容好Open SSL 0.9和1.0版本,编译的错误多得不计其数,有兴趣你可以参考这些补丁:
http://redmine.ruby-lang.org/issues/show/2022
http://redmine.ruby-lang.org/issues/show/814
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/39053
]http://projects.reductivelabs.com/issues/3363
就是打上这些补丁,也未必能正确运行rails,(比如SSL_SESSION_CMP被OpenSSL修改成private之类的问题) 建议回退到0.9.8,让作者去埋头苦干吧。。。
perl configure VC-WIN32
.\ms\do_ms.bat
nmake -f .\ms\ntdll.mak
nmake -f .\ms\ntdll.mak install
另外还需要把openssl extconf.rb的 if(mingw) 这一行去掉。。。
最后结果:
Ruby的插件的缺点是十分致命的,一旦更换了ruby的运行时,所有的C插件会全部失效,包括sqlite3-ruby之类。
下载sqlite3-ruby,利用下面的方法编译它
lib /def:sqlite3.def /machine:x86
这样可以得到sqlite3.lib,同时从源代码里拿到sqlite3.h,拷贝到某个目录,比如win32中,可以这样放置文件
c:\win32\include\sqlite3.h
c:\win32\lib\sqlite3.lib
这个sqlite3.lib只是sqlite3.dll的wrapper而已,所以要把sqlite3.dll放到路径里的某个目录下,比如C:\WINDOWS或者C:\WINDOWS\SYSTEM32
修改一下sqlite3-ruby的源代码里的extconf.rb,指向我们的目录
require 'mkmf'
SWIG_WRAP = "sqlite3_api_wrap.c"
dir_config( "sqlite3", "c:/win32/include","c:/win32/lib" )
have_library( "rt", "fdatasync" )
if have_header( "sqlite3.h" ) && have_library( "sqlite3", "sqlite3_open" )
if !File.exists?( SWIG_WRAP ) || with_config( "swig", false )
puts "creating #{SWIG_WRAP}"
system "swig -ruby sqlite3_api.i" or raise "could not build wrapper via swig (perhaps swig is not installed?)"
end
create_makefile( "sqlite3_api" )
end
然后运行ruby setup.rb,看看最后是不是在rails中正常工作了?
附件里带有有编译后的基于msvcrt10的ruby 1.9.1-P376,不想要重新经历编译的痛苦的同学可以直接下载。
- 大小: 14.3 KB
- 大小: 30 KB
分享到:
相关推荐
ruby 1.9是ruby发展历史上的一个里程碑版本: 1、ruby 1.9首次引入字节码即时编译技术,可以大大提高ruby本身的性能。根据之前的综合评测来看,1.9的性能大约是1.8.6的三倍左右,性能追上了Python。 2、ruby 1.9...
由于官方提供的Ruby-FCGI扩展不能在Ruby 1.9.1环境下使用,需要调整其中的FCGI.C源文件才能安装。这里提供的是经过修改后的源码包,可以在Ruby 1.9.1环境下使用。
网上有很多VS2008下编译的GDAL,但在VS2010下引用确不成功,搜索编译后的文件却很难找,故而亲自在VS2010下编译的GDAL1.9.1最新版,分享给大家。
ruby1.9.1文档和一本pdf, 找了比较久
VS2017_PCL1.9.1&&VS2019_PCL1.11.1环境配置,包含以下内容 vs2017环境配置:PCL_1.9.1_debug_x64.props PCL_1.9.1_release_x64.props vs2019环境配置:PCL_1.11.1_debug_x64.props PCL_1.11.1_release_x64.props
mingw32-ruby-1.9.1-wxruby-2.0.1-setup.exe
主要介绍了Ubuntu Docker 源码编译(1.9.1 )详解的相关资料,这里对编译过程进行了详细的分析介绍,需要的朋友可以参考下
文件包含以下内容: 测试文件 属性配置表Win7VS2017PCL1.9.1.props rabbit.pcd OpenNI2.dll
uaserverc-win32-x86-vs2010sp1-v1.9.1-442
Roadflow工作流开源版1.9.1,有需要的可以下载,资料绝对真实有效
最新的ruby的安装包,包含丰富的插件,如json解析等~~
到2009-06-20为止是最新的ruby编程环境, 这个环境是在Windows 下使用的 你双击这个程序就可以进行安装。
使用VS2015对jsoncpp-1.9.1编译生成32和64位静态库lib 由于使用的cmake生成的VS工程,cmake使用的是绝对路径,所以下载的文件必须按指定路径存放,生成工程路径为: D:\GitProject\jsoncpp-VS\jsoncpp-1.9.1\VS2015...
目前无漏洞版本shiro1.9.1源码+jar
jquery-1.9.1.js和jquery-1.9.1.min.js以及jquery-1.9.1-vsdoc.js
SVN 1.9.1 安装包;SVN 1.9.1 安装包;SVN 1.9.1 安装包;
Doxygen是一种开源跨平台的,以类似JavaDoc风格描述的文档系统,完全支持C、C++、Java、Objective-C和IDL语言,部分支持PHP、C#。注释的语法与Qt-Doc、KDoc和JavaDoc兼容。...doxygen-1.9.1-setup.exe