sqlite3-ruby gem:无法构建gem原生扩展

时间:2008-09-04 13:40:20

标签: windows ruby gem

更新:查看此后续问题:Gem Update on Windows - is it broken?


在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 gem 也会发生同样的事情。我似乎记得这些宝石安装得很好< 1.0宝石,但现在我在1.2.0,事情变得棘手。

我也试过这个:

gem install sqlite3-ruby --platform Win32

毋庸置疑,这也不起作用(同样的错误)

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


更新:查看此后续问题:Gem Update on Windows - is it broken?

6 个答案:

答案 0 :(得分:26)

正如Nathan所说,这似乎与最新版本的sqlite3-ruby和hpricot gems似乎没有Windows版本有关。这是面对这种情况时要做的事情(注意,gem的名称是自动通配符,因此您只需键入 sql 并获取以 sql ):

$ 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 尝试将gems更新为最新的Windows版本。当更新例程遇到错误时,它会使您退出整个过程。这个问题有一个(hacky)解决方案 here

那么,这个问题是宝石中的错误吗?宝石是不是会自动检测平台并安装最新的兼容版本?

答案 1 :(得分:9)

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

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

答案 2 :(得分:2)

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

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

答案 3 :(得分:2)

首先来自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 install sqlite3 --platform=ruby -- --with-sqlite3-include=path\to\include  
 --with-sqlite3-lib=path\to\lib --no-ri --no-rdoc
祝你好运!

答案 4 :(得分: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

希望能帮助别人!

答案 5 :(得分: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个宝石 为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个宝石 为ruby-postgres-0.7.1.2006.04.06-x86-mswin32安装ri文档... 为ruby-postgres-0.7.1.2006.04.06-x86-mswin32安装RDoc文档...