如何编译Ruby C扩展并在Windows上链接libcurl

时间:2012-07-14 02:01:58

标签: c ruby windows nmake ruby-c-extension

我正在尝试构建一个使用libcurl的Ruby C Extensions。到目前为止,我已经在Os X上成功构建了它。但是我在Windows开发方面经验不足,我不确定如何去做。

到目前为止,我可以通过遵循这些说明或多或少地使用来自Visual Studio命令提示符的extconf.rb和nmake来编译Ruby C Extensions

http://blogs.law.harvard.edu/hoanga/2006/12/14/getting-a-ruby-c-extension-to-compile-on-windows/

但是我的扩展链接libcurl,extconf.rb中有一行来检查这个

# Make sure the cURL library is installed.
have_library("curl")

创建makefile时,我得到了

checking for main() in curl.lib... no
creating Makefile

当运行nmake时,我得到了

fatal error C1083: Cannot open include file: 'curl/curl.h': No such file or directory

这是所有预期的,因为它没有安装。我已经下载了curl-7.26.0-devel-mingw64(我认为这适用于Windows 7)

我只是想在Windows环境中弄清楚我应该放置/ bin或/ include以便我的编译器可以找到它们。

1 个答案:

答案 0 :(得分:9)

在Windows上,您可以使用Microsoft提供的Visual Studio,MinGW项目的GCC或英特尔编译器等不同的编译器。

RubyInstaller(我认为是你正在使用的Ruby的版本)使用GCC(这就是为什么它在名称中生成带有mingw的文件)

由于Ruby的工作方式,您无法混合和匹配编译器。如果Ruby是使用GCC构建的,则需要GCC进行编译。

现在推荐的方法是:RubyInstaller + DevKit。 DevKit是一个便利包,提供编译Ruby C扩展所需的所有工具。

您可以在RubyInstaller downloads page

找到所有这些以及安装说明

一旦安装了Ruby和DevKit,就可以编译大多数不依赖于外部库的扩展。

现在,在您的特定情况下,libcurl,RubyInstaller提供了一些预编译的二进制文件,可以完美地安装基于curl的工具。

libcurl包在RubyInstaller group沿其他包发布的地方。

您需要下载x86-windows软件包(组页面中的链接),有关如何提取以及放置位置的说明可以在同一链接中找到。请注意,libcurl还需要c-ares,zlib和openssl包。

例如,安装curb gem后,我解压缩了我刚刚做过的包:

gem install curb -- --with-curl-dir=C:/Knapsack/x86-windows

其中C:/Knapsack/x86-windows是我提取的所有二进制包的目录。我还将bin目录添加到了PATH,因此可以找到并使用libcurl DLL。

请注意,虽然Windows使用\指定目录分隔符,但在向RubyGems提供选项时需要使用/

注意2:在你的帖子中你提到了下载的mingw64,它很可能是64位二进制文​​件。 Ruby是32位可执行文件,所以我推荐的软件包是32位(x86)。目前,RubyInstaller不提供64位(x64)二进制文件。

希望这会有所帮助。如果您对在Windows上安装和使用Ruby有其他疑问,请加入RubyInstaller group