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

我正在尝试构build使用libcurl的Ruby C扩展。 到目前为止,我已经在Os X上成功了。但是我在Windows上开发的经验却less得多,我不太清楚如何去做。

到目前为止,我可以按照这些指令或多或less的使用extconf.rb和nmake从Visual Studio命令提示符编译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") 

当创build生成文件,我得到

 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或/包括,以便我的编译器可以find它们。

Solutions Collecting From Web of "如何在Windows上编译Ruby C扩展并链接libcurl"

在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 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上有进一步的问题,请加入RubyInstaller组