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

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

虽说捣鼓编译环境是个体力活,在 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.

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 下开发过,确实要好太多了:)

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