sqlite3-ruby gem: 无法构建本地扩展的宝石

22

更新:请查看这个后续问题:Gem Update在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

同样的问题也出现在hpricot宝石上。我似乎记得这些宝石在1.0以下版本上安装得很好,但现在我使用的是1.2.0版本,情况变得混乱了。

我也尝试过这个方法:

gem install sqlite3-ruby --platform Win32

不用说,这种方法也行不通(同样的错误)

有人知道发生了什么问题以及如何解决吗?


更新:请查看这个后续问题:Windows上的Gem更新-是否存在问题?

6个回答

28

正如Nathan所指出的那样,这似乎与sqlite3-ruby和hpricot gems的最新版本没有Windows版本有关。当遇到这种情况时,应该采取以下措施(注意,gem名称会自动使用通配符,因此您只需键入sql即可获取以sql开头的所有gems列表):

$ 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
很讨厌的是,执行 gem update 会尝试将 gem 更新到最新版本,但这些版本在 Windows 上不可用。当更新过程遇到错误时,它会强制退出整个过程。这里有一个 (hacky) 解决此问题的方案 所以,这个问题是 GEM 的一个 bug 吗?GEM 不应该自动检测平台并安装最新兼容版本吗?

我怀疑问题可能是宝石中的一个错误,而不是整个宝石系统的问题。如果宝石没有指定它是特定于平台的,那么宝石系统可能会假设它是一个平台无关的宝石并尝试安装它。 - Nathan Fritz

9

我似乎还需要libsqlite0-dev(在libsqlite3-dev的基础上)才能在Ubuntu 10.04.1 LTS上安装gem。还有一个名为libsqlite3-ruby的库,我已经安装了它,但我不知道它是否有任何区别。 - mvexel

3

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

-include
    --sqlite3.h
    --sqlite3ext.h
-lib
    --shell.c
    --sqlite3.c
    --sqlite3.def
    --sqlite3.dll

最后安装 gem 如下:

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

祝你好运!


2
最新版本是否还未移植到Win32平台?由于这个宝石确实有绑定到编译代码,所以需要一个特定于平台的宝石。如果我强制安装版本1.2.3而不是当前的1.2.4版本,则会安装特定于平台的版本,但是当我允许gem尝试安装当前版本时,我得到了通用的1.2.4版本(在gems库文件夹中,它缺少其他sqlite3-ruby文件夹名称中的-x86-mswin32后缀)。也许其他人可以回答gem如何处理特定于平台的宝石。每个平台都会上传单独的宝石,然后gem软件选择要下载哪个宝石吗?

1

我在Windows上遇到了同样的问题,我安装了MinGW http://sourceforge.net/projects/mingw/files/Automated%20MinGW%20Installer/MinGW%205.1.6/MinGW-5.1.6.exe/download,问题就解决了 :-)

C:>gem install hpricot 成功安装hpricot-0.8.2-x86-mswin32 已安装1个gem 正在为hpricot-0.8.2-x86-mswin32安装ri文档... 正在为hpricot-0.8.2-x86-mswin32安装RDoc文档...

C:>gem install ruby-postgres 成功安装ruby-postgres-0.7.1.2006.04.06-x86-mswin32 已安装1个gem 正在为ruby-postgres-0.7.1.2006.04.06-x86-mswin32安装ri文档... 正在为ruby-postgres-0.7.1.2006.04.06-x86-mswin32安装RDoc文档...


1

我也遇到了这个问题。值得知道的是,1.2.3和1.2.4之间的区别并不重要。以下是1.2.4版本的发布说明:

版本名称:1.2.4

说明:此版本仅更新生成的C文件以反映对SWIG文件进行的兼容性更改。二进制构建(例如Windows)不受影响,无需更新。一般情况下,除非您使用早于1.8.6版本的Ruby,否则您不需要此更新。(来源:1.2.4. release notes

希望能帮助其他人!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接