【问题标题】:Problem installing sqlite3-ruby!安装 sqlite3-ruby 时出现问题!
【发布时间】:2011-03-29 05:49:59
【问题描述】:

我在 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 failed *
由于某种原因无法创建 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
制作 && 制作安装
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?

【问题讨论】:

    标签: ruby rubygems sqlite3-ruby


    【解决方案1】:

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

    sudo gem install sqlite3-ruby --version=1.2.5
    

    【讨论】:

      【解决方案2】:

      这是由于 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
      

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

      【讨论】:

        【解决方案3】:

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

        如果你在非标准位置安装了 sqlite3,你可以指定 包含和库的位置 文件通过这样做:

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

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

        【讨论】:

        • 如果你从源代码下载并安装了 sqlite3 到 /usr/local 这就是你要走的路!谢谢。
        【解决方案4】:

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

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

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

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

        HTH,贾雷克

        【讨论】:

          【解决方案5】:

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

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

          并且做到了:

          bundle install
          

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

          好像 sqlite3 是重复的 - 很奇怪

          【讨论】:

            【解决方案6】:

            我在 OSX 10.5.8 上遇到了同样的问题

            解决方案非常简单:

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

            一切都按预期工作。

            希望这个结果有用!

            【讨论】:

              【解决方案7】:

              我遇到了完全相同的问题。当我将所有文件(不仅仅是libsqlite3.a)从~/sqlite/lib 移动到gems/sqlite3-ruby-1.3.1/ext/sqlite3 时,Jarek 的解决方案奏效了。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2011-01-27
                • 1970-01-01
                • 1970-01-01
                • 2013-01-09
                • 2019-09-03
                • 2021-08-18
                • 1970-01-01
                • 2019-07-11
                相关资源
                最近更新 更多