- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试构建一个使用 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 放在哪里,以便我的编译器可以找到它们。
最佳答案
在 Windows 上,您可以使用不同的编译器,来自 Microsoft 提供的 Visual Studio、来自 MinGW 项目的 GCC 或 Intel 编译器。
RubyInstaller(我假设是您正在使用的 Ruby 版本)使用 GCC(这就是它生成名称中带有 mingw 的文件的原因)
由于 Ruby 的工作方式,您不能混合搭配编译器。如果 Ruby 是使用 GCC 构建的,则需要 GCC 进行编译。
现在推荐的方法是:RubyInstaller + DevKit。 DevKit 是一个便利包,提供了编译 Ruby C 扩展所需的所有工具。
您可以在 RubyInstaller downloads page 找到所有这些以及安装说明。
安装 Ruby 和 DevKit 后,您可以编译大多数不依赖于外部库的扩展。
现在,在您的特定情况下,libcurl、RubyInstaller 提供了一些预编译的二进制文件,可以完美地安装基于 curl 的工具。
在 RubyInstaller group 公布的 libcurl 包与其他包一起。
您将需要下载 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
关于c - 如何在 Windows 上编译 Ruby C 扩展和链接 libcurl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11480430/
我是一名优秀的程序员,十分优秀!