关于Windows:sqlite3-ruby gem:无法构建gem本机扩展

关于Windows:sqlite3-ruby gem:无法构建gem本机扩展

sqlite3-ruby gem: Failed to build gem native extension

更新:请检查以下后续问题:Windows上的宝石更新-损坏了吗?

在Windows上,当我这样做时:

1
gem install sqlite3-ruby

我收到以下错误:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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

同样的事情发生在hpricot宝石上。 我似乎记得这些宝石在<1.0宝石上安装得很好,但是现在我在1.2.0上,情况变得很棘手。

我也尝试过这个:

1
gem install sqlite3-ruby --platform Win32

不用说,这也不起作用(相同的错误)

有谁知道这里发生了什么以及如何解决这个问题?

更新:请检查以下后续问题:Windows上的宝石更新-损坏了吗?


正如Nathan所暗示的,这似乎与以下事实有关:最新版本的sqlite3-ruby和hpricot宝石似乎没有Windows版本。遇到这种情况时,以下是处理方法(请注意,gem的名称会自动通配,因此您可以仅输入sql并获取以sql开头的所有gem的列表):

1
2
3
4
5
6
7
$ 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)

然后,您可以选择要安装的版本:

1
gem install sqlite3-ruby -v 1.2.3

为了成功安装hpricot,我这样做:

1
gem install hpricot -v 0.6

令人烦恼的是,执行gem update尝试将gem更新到其最新的Windows破碎版本。当更新例程遇到错误时,它将使您脱离整个过程。这里有一个(棘手的)解决方案。

那么,这是宝石中的错误吗? gems是否应该不自动检测平台并安装最新的兼容版本?


我在Ubuntu上遇到了相同的问题,这为我解决了问题:

http://newsgroups.derkeiler.com/Archive/Comp/comp.lang.ruby/2008-08/msg00339.html


首先来自sqlite.org(http://www.sqlite.org/download.html)
下载->
预编译的二进制文件:sqlite-dll-win32-x86-3071700.zip
和源代码:sqlite-autoconf-3071700.tar.gz
然后提取为:

1
2
3
4
5
6
7
8
-include
    --sqlite3.h
    --sqlite3ext.h
-lib
    --shell.c
    --sqlite3.c
    --sqlite3.def
    --sqlite3.dll

最后安装gem,例如:

1
2
gem install sqlite3 --platform=ruby -- --with-sqlite3-include=path\\to\\include  
 --with-sqlite3-lib=path\\to\\lib --no-ri --no-rdoc

祝好运!


最新版本可能尚未移植到Win32吗?由于此特定gem确实具有对已编译代码的绑定,因此需要特定于平台的gem。如果我强制安装版本1.2.3而不是当前版本1.2.4,则会安装特定于平台的版本,但是当我允许gem尝试安装当前版本时,我会获得通用的1.2.4版本(在gems中)库文件夹,它缺少其他sqlite3-ruby文件夹名称中带有的-x86-mswin32后缀。

也许其他人可以回答gem如何处理平台特定的gem。是否为每个平台分别上载了gem,gem软件会选择下拉哪一个?


我在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文档...


我也遇到了这个问题。值得注意的是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)

希望对别人有帮助!


推荐阅读