Ruby 在 windows xp 成功编译 gem typhoeus 的步骤

skandhas · 2012年02月08日 · 最后由 carl 回复于 2012年02月09日 · 5837 次阅读

虽说捣鼓编译环境是个体力活,在windows下尤甚。但是这个能力是哪个平台都需要的。Unix/Linux要更方便一些。如果遇到有些开源工程,系统里并没有自带其编译环境,那也得自己捣鼓了。尤其是做C/C++开发的:>

还是很赞同大家的观点:做Rails开发最好不要在windows下。如果实在没得选择,那就硬着头皮上吧。 祝福你千万别撞上那些无解的gem。呵呵

写给@carl 在windows xp下成功编译typhoeus通过,并运行。步骤如下,希望对你有所帮助,今后遇到类似的gem,也可做参考。

要编译native gem,首先要有DevKit.这是必须的。

其实curl有windows预先编译好的dev包: http://www.gknw.net/mirror/curl/win32/curl-7.24.0-devel-mingw32.zip. 估计是被墙了,下载不了。那我们就自己编译curl。

1.编译curl 下载curl代码:http://curl.haxx.se/download/curl-7.24.0.zip. 把代码 解压缩至一个目录(我的是R盘):R:\curl-7.24.0

在终端下,切换到你的Devkit的安装目录,运行msys.bat,进入Devkit带的mingw环境。 在mingw环境下进入到curl的lib目录下,然后 make -f Makefile.m32 make完成以后,lib目录下会生成libcurl.a,libcurldll.a,libcurl.dll这三个

2.编译typhoeus 在windows下,typhoeus是动态链接到curl的。所以需要libcurldll.a,libcurl.dll这两个。 typhoeus没有依赖系统特性,只用了curl了,还算比较好编译

有一点要注意: 你可以建立一个目录importlib,然后把libcurldll.a (30几k的那个)考到这个importlib,然后改名:libcurldll.a ->libcurl.a 改名这一步很重要

set CPATH=R:\curl-7.24.0\include
set LIBRARY_PATH=R:\curl-7.24.0\importlib

gem install typhoeus --platform=ruby

输出信息:

Temporarily enhancing PATH to include DevKit...
Building native extensions.  This could take a while...
Successfully installed typhoeus-0.3.3
1 gem installed
Installing ri documentation for typhoeus-0.3.3...
Installing RDoc documentation for typhoeus-0.3.3...

编译完成之后,因为该gem在运行时依赖libcurl.dll,所以需要把libcurl.dll的路径添加到环境变量PATH里。如果嫌麻烦,直接把libcurl.dll拷贝到ruby的bin目录里也行。比如: E:\Ruby192\bin.

共收到 12 条回复

set CPATH=R:\curl-7.24.0\include set LIBRARY_PATH R:\curl-7.24.0\importlib

gem install typhoeus --platform=ruby

这些命令是在哪里输入的?

#1楼 @carl 这3个命令你另开一个新的命令行窗口,在新窗口里输入。不要在那个mingw的环境里。

@carl

set LIBRARY_PATH R:\curl-7.24.0\importlib

忘了一个等号,应为

set LIBRARY_PATH=R:\curl-7.24.0\importlib

@skandhas 嗯,装上了:)谢谢你!!

#4楼 @carl 能帮上忙就好 :>

@skandhas 有一个问题,同样的语句,在ubuntu下好使, response = Typhoeus::Request.get("https://mail.google.com/mail", :disable_ssl_peer_verification => true) 但是到了windows下,response 一直是空,这是什么原因,是说Typhoeus没起作用?

#6楼 @carl @curl_error_message="Unsupported protocol" 应该是编译的curl不带SSL支持的。可以编译一个支持SSL的curl即可

@skandhas 其他的都一样?

#8楼 @carl curl的编译可以不同的选项,如zlib ssl。。 你可以看看curl的lib目录下的Makefile.m32文件。 你有可能还需要编译OpenSSL :> curl需要的OpenSSL的版本是:openssl-0.9.8。你可以修改Makefile.m32。也可以带CFG编译:

make -f Makefile.m32 CFG=-ssl

当然,你的系统的SSL库必须得有。没有的话,得自己编译 :> (确实有些折腾)

至于编译gem的步骤是不变的。设置好CPATH和LABRARY_PATH后,再gem install

@carl mingw编译带SSL的curl,网络上也有很多资源可以参考。祝你好运 :> 尽量别在windows下搞rails :》

typhoeus没有依赖系统特性,只用了curl了,还算比较好编译。

这个被 @skandhas 加粗了。 @carl 估计以后会体会到为什么要加粗。。

linux 包依赖很严重。 嘿嘿。。。我偷笑了。。

好的,谢谢@skandhas ,我试一下:) . @jinleileiking 好吧:(,我也是没办法采用windows平台的,ubuntu下开发过,确实要好太多了:)

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册