3

我正在尝试构建一个使用 libcurl 的 Ruby C 扩展。到目前为止,我已经在 Os X 上成功构建了它。但是我在 Windows 中开发的经验要少得多,并且不完全确定如何去做。

到目前为止,我可以按照这些说明或多或少地使用 Visual Studio 命令提示符中的 extconf.rb 和 nmake 编译 Ruby C 扩展

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 放在哪里,以便我的编译器可以找到它们。

4

1 回答 1

10

在 Windows 上,您可以使用不同的编译器,包括 Microsoft 提供的 Visual Studio、MinGW 项目的 GCC 或 Intel 编译器。

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

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

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

您可以在RubyInstaller 下载页面找到所有这些以及安装说明

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

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

libcurl 包在RubyInstaller 组中与其他包一起发布。

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

例如,要安装遏制 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 组

于 2012-07-14T13:54:05.700 回答