【问题标题】:Ruby Sqlite3 installation sqlite3_libversion_number() macOS SierraRuby Sqlite3 安装 sqlite3_libversion_number() macOS Sierra
【发布时间】:2017-05-13 05:44:49
【问题描述】:

我正在尝试安装 Metasploit 框架(不重要),而 bundler 正在尝试安装 sqlite3,这是它一直失败的地方。已安装 Sqlite3(在命令行执行 sqlite3 将我带入环境)并使用 brew link sqlite3 链接(并添加 --force,出于某种原因)但 bundler install 每次都失败并出现此错误:

sudo gem install sqlite3
Building native extensions.  This could take a while...
ERROR:  Error installing sqlite3:
    ERROR: Failed to build gem native extension.

    /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby extconf.rb
Error: Running Homebrew as root is extremely dangerous and no longer supported.
As Homebrew does not drop privileges on installation you would be giving all
build scripts full access to your system.
checking for sqlite3.h... yes
checking for pthread_create() in -lpthread... yes
checking for sqlite3_libversion_number() in -lsqlite3... no
sqlite3 is missing. Try 'brew install sqlite3',
'yum install sqlite-devel' or 'apt-get install libsqlite3-dev'
and check your shared library search path (the
location where your sqlite3 shared library is located).
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

Provided configuration options:
    --with-opt-dir
    --without-opt-dir
    --with-opt-include
    --without-opt-include=${opt-dir}/include
    --with-opt-lib
    --without-opt-lib=${opt-dir}/lib
    --with-make-prog
    --without-make-prog
    --srcdir=.
    --curdir
    --ruby=/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby
    --with-sqlite3-config
    --without-sqlite3-config
    --with-pkg-config
    --without-pkg-config
    --with-sqlite3-dir
    --without-sqlite3-dir
    --with-sqlite3-include
    --without-sqlite3-include=${sqlite3-dir}/include
    --with-sqlite3-lib
    --without-sqlite3-lib=${sqlite3-dir}/
    --with-pthreadlib
    --without-pthreadlib
    --with-sqlite3lib
    --without-sqlite3lib


Gem files will remain installed in /Library/Ruby/Gems/2.0.0/gems/sqlite3-1.3.12 for inspection.
Results logged to /Library/Ruby/Gems/2.0.0/gems/sqlite3-1.3.12/ext/sqlite3/gem_make.out

【问题讨论】:

  • 我在尝试安装 gem install sequel mysql sqlite3 时遇到了完全相同的问题,因此我可以像在 stackoverflow.com/a/11328913/539149 中一样从 mysql 转换为 sqlite,您找到解决方案了吗?

标签: ruby-on-rails ruby sqlite


【解决方案1】:

我终于设法通过在 macOS Sierra 10.12.5 (16F73) 上指定内置的 Mac OS X sqlite 库目录解决了这个问题:

$ whereis sqlite3
/usr/bin/sqlite3
# if binary is in /usr/bin then library is typically in /usr/lib
$ gem install sqlite3 -- --with-sqlite3-lib=/usr/lib
Building native extensions with: '--with-sqlite3-lib=/usr/lib'
This could take a while...
Successfully installed sqlite3-1.3.13
Parsing documentation for sqlite3-1.3.13
Done installing documentation for sqlite3 after 0 seconds
1 gem installed

我尝试指定 Homebrew 库目录,但由于某种原因它不起作用:

$ brew ls --verbose sqlite3
/usr/local/Cellar/sqlite/3.19.3/.brew/sqlite.rb
/usr/local/Cellar/sqlite/3.19.3/bin/sqlite3
/usr/local/Cellar/sqlite/3.19.3/include/msvc.h
/usr/local/Cellar/sqlite/3.19.3/include/sqlite3.h
/usr/local/Cellar/sqlite/3.19.3/include/sqlite3ext.h
/usr/local/Cellar/sqlite/3.19.3/INSTALL_RECEIPT.json
/usr/local/Cellar/sqlite/3.19.3/lib/libsqlite3.0.dylib
/usr/local/Cellar/sqlite/3.19.3/lib/libsqlite3.a
/usr/local/Cellar/sqlite/3.19.3/lib/libsqlite3.dylib
/usr/local/Cellar/sqlite/3.19.3/lib/pkgconfig/sqlite3.pc
/usr/local/Cellar/sqlite/3.19.3/README.txt
/usr/local/Cellar/sqlite/3.19.3/share/man/man1/sqlite3.1
$ gem install sqlite3 -- --with-sqlite3-lib=/usr/local/Cellar/sqlite/3.19.3/lib
This could take a while...
ERROR:  Error installing sqlite3:
    ERROR: Failed to build gem native extension.
...

如果有人知道如何指定 Homebrew 库目录,请告诉我,因为这样可以更好地控制安装(据说 MacPorts 有效,但我不再使用它)。


对于任何好奇的人,这里是安装 Ruby 的 Sequel 的完整命令:

gem install sequel mysql sqlite3 -- --with-sqlite3-lib=/usr/lib

以及如何将侦听主机端口 3306 的 Laravel Homestead MySQL 数据库从 my comment on the question 转换为 SQLite:

sequel mysql://homestead:secret@192.168.10.10:3306/my_database -C sqlite://my_database.sqlite

【讨论】:

  • 2017-Nov-20 'gem install sqlite3 -- --with-sqlite3-lib=/usr/lib' 完全解决了我的问题,谢谢!
  • 如果您使用的是 bundler,这应该使它适用于您运行 bundler 的所有地方:bundle config set --global build.sqlite3 --with-sqlite3-lib=/usr/lib
【解决方案2】:

这在 Mac High Sierra OS 10.13 上对我有用

gem install sqlite3 -- --with-sqlite3-lib=/usr/lib

【讨论】:

  • 有没有办法直接从 Gemfile 进行这项工作?类似于:# 添加到 Gemfile gem 'sqlite3', :lib => "/usr/lib/", :condition => :only_if_mac
  • 这终于对我有用了:bundle config build.sqlite3 --with-sqlite3-include=$HOME/include --with-sqlite3-lib=$HOME/lib --with-sqlite3-dir=$HOME/bin
  • 要让它与捆绑器一起使用:bundle config build.sqlite3 --with-sqlite3-lib=/usr/lib
【解决方案3】:

通过将文件指针的最后一部分替换为安装尝试的日志,深入了解您将找到的mkmf.log。就我而言:

Results logged to ~/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/extensions/x86_64-darwin-19/2.2.0-static/sqlite3-1.3.13/gem_make.out

所以我在这里找到mkmf.log:

~/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/extensions/x86_64-darwin-19/2.2.0-static/sqlite3-1.3.13/mkmf.log

我找到了更明确的错误描述:

conftest.c:13:15: error: implicit declaration of function 'pthread_create' is invalid in C99 [-Werror,-Wimplicit-function-declaration]

conftest.c:13:15: error: implicit declaration of function 'sqlite3_libversion_number' is invalid in C99 [-Werror,-Wimplicit-function-declaration]

所以添加--with-cflags="-Wno-error=implicit-function-declaration" 就成功了!

gem install sqlite3 -- --with-cflags="-Wno-error=implicit-function-declaration"

【讨论】:

    猜你喜欢
    • 2017-07-04
    • 1970-01-01
    • 1970-01-01
    • 2017-06-22
    • 2017-08-18
    • 2017-05-05
    • 1970-01-01
    • 1970-01-01
    • 2018-12-05
    相关资源
    最近更新 更多