sqlite3-ruby gem:无法构建gem本机扩展
更新:请检查以下后续问题:Windows上的宝石更新是否损坏?
在Windows上,当我这样做时:
gem install sqlite3-ruby
我收到以下错误:
Building native extensions. This could take a while... ERROR: Error installing sqlite3-ruby: ERROR: Failed to build gem native extension. c:/ruby/bin/ruby.exe extconf.rb install sqlite3-ruby --platform Win32 checking for fdatasync() in rt.lib... no checking for sqlite3.h... no nmake 'nmake' is not recognized as an internal or external command, operable program or batch file. Gem files will remain installed in c:/ruby/lib/ruby/gems/1.8/gems/sqlite3-ruby-1.2.4 for inspection. Results logged to c:/ruby/lib/ruby/gems/1.8/gems/sqlite3-ruby-1.2.4/ext/sqlite3_api/gem_make.out
杏子宝石也会发生同样的事情。我似乎记得这些宝石在<1.0宝石上安装得很好,但是现在我在1.2.0上,情况变得很棘手。
我也尝试过这个:
gem install sqlite3-ruby --platform Win32
不用说,这也不起作用(相同的错误)
有谁知道这里发生了什么以及如何解决这个问题?
更新:请检查以下后续问题:Windows上的宝石更新是否损坏?
解决方案
回答
最新版本可能尚未移植到Win32吗?由于此特定的gem确实具有对已编译代码的绑定,因此将需要特定于平台的gem。如果我强制安装版本1.2.3而不是当前版本1.2.4,则将安装特定于平台的版本,但是当我允许gem尝试安装当前版本时,我将获得通用的1.2.4版本(在gems中)库文件夹,它没有其他sqlite3-ruby文件夹的名称带有-x86-mswin32后缀。
也许其他人可以回答gem如何处理平台特定的gem。是否为每个平台分别上传了gem,gem软件会选择下拉哪一个?
回答
正如Nathan所建议的,这似乎与以下事实有关:最新版本的sqlite3-ruby和hpricot宝石似乎没有Windows版本。遇到这种情况时,以下是处理方法(请注意,gem的名称会自动通配,因此我们可以仅输入sql并获取以sql开头的所有gem的列表):
$ gem list --remote --all sqlite *** REMOTE GEMS *** sqlite (2.0.1, 2.0.0, 1.3.1, 1.3.0, 1.2.9.1, 1.2.0, 1.1.3, 1.1.2, 1.1.1, 1.1) sqlite-ruby (2.2.3, 2.2.2, 2.2.1, 2.2.0, 2.1.0, 2.0.3, 2.0.2) sqlite3-ruby (1.2.4, 1.2.3, 1.2.2, 1.2.1, 1.2.0, 1.1.0, 1.0.1, 1.0.0, 0.9.0, 0.6.0, 0.5.0)
然后,我们可以选择要安装的版本:
gem install sqlite3-ruby -v 1.2.3
为了成功安装hpricot,我这样做:
gem install hpricot -v 0.6
烦人的是,执行"宝石更新"试图将宝石更新到其最新的Windows破解版本。当更新例程遇到错误时,它将使我们脱离整个过程。这里有一个针对这个问题的解决方案。
那么,这是宝石中的错误吗? gems是否应该不自动检测平台并安装最新的兼容版本?
回答
我也遇到了这个问题。值得注意的是1.2.3和1.2.4之间的差异并不明显。这是1.2.4. 发行说明:
Release Name: 1.2.4 Notes: This release only updates the generated C file to reflect the compatibility changes that were made to the SWIG file. Binary builds (e.g., Windows) are not affected, and need no update. In general, you will not need this update unless you are using a version of Ruby prior to 1.8.6. (source: 1.2.4. release notes)
希望对别人有帮助!
回答
我在Ubuntu上遇到了同样的问题,这为我解决了这个问题:
http://newsgroups.derkeiler.com/Archive/Comp/comp.lang.ruby/2008-08/msg00339.html
回答
我在Windows上遇到了同样的问题,并且安装了MinGW
http://sourceforge.net/projects/mingw/files/Automated%20MinGW%20Installer/MinGW%205.1.6/MinGW-5.1.6.exe/download
问题就消失了:-)
C:> gem安装hpricot
成功安装了hpricot-0.8.2-x86-mswin32
已安装1个宝石
正在安装hpricot-0.8.2-x86-mswin32的ri文档...
正在安装hpricot-0.8.2-x86-mswin32的RDoc文档...
C:> gem安装ruby-postgres
成功安装ruby-postgres-0.7.1.2006.04.06-x86-mswin32
已安装1个宝石
正在安装ruby-postgres-0.7.1.2006.04.06-x86-mswin32的ri文档...
正在安装ruby-postgres-0.7.1.2006.04.06-x86-mswin32的RDoc文档...