2010-08-13 170 views
9

我遇到在crunchbang linux上安装sqlite3-ruby gem的问题。在过去的几个小时内搜索了几个人,并且遇到了几个同样的问题的人之后,我仍然没有得到它的工作。安装sqlite3-ruby时出现问题!

这是我尝试了“sudo的创业板安装sqlite3的,红宝石”

大厦原生扩展后看到。这可能需要一段时间...
错误:安装sqlite3-ruby时出错:
错误:无法构建gem本机扩展。

/usr/bin/ruby1.8 extconf.rb
检查sqlite3.h ...是
在-lsqlite3检查sqlite3_libversion_number()...是
检查rb_proc_arity()...没有
检查sqlite3_initialize()...没有
sqlite3-ruby只支持sqlite3版本3.6.16+,请升级!
* extconf.rb失败*
无法创建Makefile文件由于某些原因,可能是缺乏
必要的库和/或标题。检查mkmf.log文件以获取更多
的详细信息。您可能需要配置选项。

接下来我跑过这个页面; http://groups.google.com/group/sqlite3-ruby/browse_thread/thread/f22d098b561c48af/6e754f7b2fc3cd75?#6e754f7b2fc3cd75

我下载的sqlite-融合,3.7.0.1.tar.gz并发出以下命令:

焦油zxvf的sqlite-合并-3.7.0.1.tar.gz
CD光盘的sqlite-3.7。 0.1
的mkdir $ HOME/SQLite的
的./configure --prefix = $ HOME/SQLite的
使& &使安装
sudo的创业板安装sqlite3的,红宝石 - --with-sqlite3的-DIR = $ HOME /源码

但是,我仍然得到完全相同的错误。我用'sudo apt-get install sqlite3 libsqlite3-dev',但我仍然得到完全相同的错误。

有什么建议吗?

作为一个小问题,当我使用'sudo apt-get install sqlite3'时,如何获取3.5.9而不是我手动下载的3.7.0.1?

回答

3

这是由于extconf.rb在汇编Makefile之前测试函数时拾取旧的3.5.9库。

一个解决方案削减这短短的是apt-get的删除sqlite3的,然后重试

sudo gem install sqlite3-ruby -- --with-sqlite3-dir=$HOME/sqlite 

这可以节省您的不兼容性,如果你想使用sqlite3的命令行二进制文件。

另一个解决方案是将你的新的〜/ sqlite/lib/libsqlite3.a复制到你的gem的build目录中(参见gem env,像gems/sqlite3-ruby-1.3。1/ext/sqlite3)并重试

sudo gem install sqlite3-ruby 

测试应该现在拿起你的新库并安装好。

1

我有完全相同的问题。当我将所有文件(不只是libsqlite3.a)从~/sqlite/lib移至gems/sqlite3-ruby-1.3.1/ext/sqlite3时,Jarek的解决方案起作用。

15

安装sqlite3的,红宝石的较低版本应该解决您的问题:

sudo gem install sqlite3-ruby --version=1.2.5 
+2

这对我有效。 – Chris 2011-03-13 18:41:23

1

肖恩,让我尝试阐述。

Ruby通过编译小部分示例并验证编译是否成功来适应sqlite3库。这将拾取旧图书馆,它不包括所需的功能。

第一个解决方案是删除旧库并将ruby指向您下载新版本的目录。根据您使用的系统,您必须选择正确的软件包管理器:apt-get,dpkg,yum,yast,ipkg,...以删除过时的软件包。这可以确保你的构建不会拾取任何旧件。然后你必须确保你使用--with-sqlite3-dir选项将ruby指向新库所在的正确目录。

第二种解决方案是一种黑客攻击。它依靠C编译器在其他目录之前拾取当前目录中的文件。您可以使用cp,mc或任何其他文件管理器将.a库和.h头复制到构建目录。构建应该没问题,但是你的sqlite3命令仍旧是旧的,可​​能与用新库创建的数据库不兼容。

HTH,亚雷克

2

%的sqlite3的,红宝石(现名为sqlite3的)README.rdoc,你可以用下面的方法来引导到正确的库:

If you have sqlite3 installed in a non-standard location, you can specify the location of the include and lib files by doing:

gem install sqlite3 -- --with-sqlite3-include=/opt/local/include \

--with-sqlite3-lib=/opt/local/lib

+0

如果您从源代码下载并安装sqlite3到/ usr/local,这是要走的路!谢谢。 – Dmitri 2011-07-10 00:15:08

1

我有一个类似的问题 - 我只是从./Gemfile在项目目录中注释掉以下烦人行:

# gem 'sqlite3-ruby', :require => 'sqlite3' 

,做:

bundle install 

脚本/导轨服务器再次正常工作。唷!

好像sqlite3的是重复的 - 怪异

1

我碰到了同样的问题上OSX 10.5.8

的解决方案是非常简单的:

1.-从Xcode的苹果开发下载: xcode314_2809_developerdvd.dmg(需要注册) 2:下载并安装的MacPorts:http://distfiles.macports.org/MacPorts/MacPorts-1.9.2-10.5-Leopard.dmg 3.- sudo的港口安装sqlite3的

,一切工作作为意。

希望这个结果有用!