我正在尝试构建一个使用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以便我的编译器可以找到它们。
答案 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