9

我在 crunchbang linux 上安装 sqlite3-ruby gem 时遇到问题。在谷歌搜索了过去几个小时并跟踪了几个有同样问题的人之后,我仍然没有让它工作。

这是我在尝试“sudo gem install sqlite3-ruby”后看到的

构建原生扩展。这可能需要一段时间...
错误:安装 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-amalgamation-3.7.0.1.tar.gz 并发出以下命令:

tar zxvf sqlite-amalgamation-3.7.0.1.tar.gz
cd cd sqlite-3.7.0.1
mkdir $HOME/sqlite
./configure --prefix=$HOME/sqlite
make && make install
sudo gem install sqlite3-ruby -- -- with-sqlite3-dir=$HOME/sqlite

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

有什么建议吗?

顺便说一句,当我使用“sudo apt-get install sqlite3”时,它为什么会抓取 3.5.9 而不是我手动下载的 3.7.0.1?

4

7 回答 7

15

安装较低版本的 sqlite3-ruby 应该可以解决您的问题:

sudo gem install sqlite3-ruby --version=1.2.5
于 2010-10-28T20:10:17.750 回答
3

这是因为 extconf.rb 在组合 Makefile 之前在测试功能时选择了旧的 3.5.9 库。

缩短此时间的一种解决方案是 apt-get remove sqlite3 并重试

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

如果您想使用 sqlite3 命令行二进制文件,这可能会使您免于不兼容。

另一种解决方案是将新的 ~/sqlite/lib/libsqlite3.a 复制到 gem 的构建目录中(参见 gem env,类似于 gems/sqlite3-ruby-1.3.1/ext/sqlite3)并重试

sudo gem install sqlite3-ruby

测试现在应该选择您的新库并正常安装。

于 2010-09-10T14:53:31.330 回答
2

根据 sqlite3-ruby(现在名为 sqlite3)README.rdoc,您可以使用以下方法指向正确的库:

如果您在非标准位置安装了 sqlite3,您可以通过执行以下操作指定包含和 lib 文件的位置:

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

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

于 2011-01-30T17:17:27.430 回答
1

我有同样的问题。当我将所有文件(不仅仅是libsqlite3.a~/sqlite/libgems/sqlite3-ruby-1.3.1/ext/sqlite3.

于 2010-09-16T23:00:54.907 回答
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

一切都按预期工作。

希望这个结果有用!

于 2011-03-13T04:40:44.540 回答
1

肖恩,让我试着详细说明一下。

Ruby 正在通过编译小示例并验证编译是否成功来适应 sqlite3 库。这会选择旧库,其中不包含所需的功能。

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

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

HTH,贾雷克

于 2010-11-04T21:46:55.823 回答
1

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

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

并做了:

bundle install

脚本/rails 服务器再次正常工作。呸!

好像 sqlite3 是重复的 - 很奇怪

于 2011-02-04T17:12:18.453 回答