ld:bundle install for mysql 2 gem Ruby on macOS Big Sur 11.4 Apple M1时未找到-lzstd的库

1sbrub3j  于 12个月前  发布在  Mysql
关注(0)|答案(5)|浏览(130)

运行bundle install时

An error occurred while installing mysql2 (0.5.3), and Bundler cannot continue.
Make sure that `gem install mysql2 -v '0.5.3' --source 'https://rubygems.org/'` succeeds before bundling.

字符串

Rails app 6.1.3
Bundler版本2.2.19

macOS Big Sur 11.4**

苹果M1

在Gemfile中

ruby '2.6.6'
gem 'rails', '~> 6.1.3', '>= 6.1.3.1'
gem 'mysql2'


在Gemfile中.lock mysql是在0.5.3
当我运行bundle install时,它会崩溃,正常情况下:


的数据
检查之前出现在输出中的构建错误,构建错误似乎是:(完整结果如下)

ld: library not found for -lzstd


bundle install的完整结果如下:

jason@MacBook-Air  % bundle install    
Fetching gem metadata from https://rubygems.org/
Fetching gem metadata from https://rubygems.org/........
Using rake 13.0.3
Using concurrent-ruby 1.1.8
Using rack 2.2.3
Using nio4r 2.5.7
Using builder 3.2.4
Using marcel 1.0.1
Using mini_portile2 2.5.1
Using multi_json 1.15.0
Using method_source 1.0.0
Using crass 1.0.6
Using thor 1.1.0
Using public_suffix 4.0.6
Using execjs 2.7.0
Using aws-eventstream 1.1.1
Using aws-partitions 1.447.0
Using jmespath 1.4.0
Using bcrypt 3.1.16
Using betterlorem 0.1.2
Using bindex 0.8.1
Using msgpack 1.4.2
Using popper_js 1.16.0
Using ffi 1.15.0
Using tilt 2.0.10
Using bundler 2.2.19
Using byebug 11.1.3
Using regexp_parser 2.1.1
Using childprocess 3.0.0
Using connection_pool 2.2.5
Using rexml 3.2.5
Using orm_adapter 0.5.0
Using diff-lcs 1.4.4
Using unf_ext 0.0.7.7
Using docile 1.3.5
Using e2mmap 0.1.0
Using erubis 2.7.0
Using ffaker 2.18.0
Using finishing_moves 1.0.1
Using raabro 1.4.0
Using temple 0.8.2
Using sexp_processor 4.15.2
Using hashdiff 1.0.1
Using hiredis 0.6.3
Using honeybadger 4.8.0
Using kaminari-core 1.2.1
Using rb-fsevent 0.10.4
Using ruby_dep 1.5.0
Using ruby2_keywords 0.0.4
Fetching mysql2 0.5.3
Using minitest 5.14.4
Using zeitwerk 2.4.2
Using parslet 1.8.2
Using puma 3.12.6
Using rails_http_options 0.1.0
Using redis 4.2.5
Using rubyzip 2.3.0
Using semantic_range 3.0.0
Using rspec-support 3.10.2
Using simple-random 1.0.3
Using simplecov-html 0.12.3
Using simplecov_json_formatter 0.1.2
Using spring 2.1.1
Using sqlite3 1.4.2
Using stripe 5.32.1
Using vcr 6.0.0
Using i18n 1.8.10
Using tzinfo 2.0.4
Using rack-test 1.1.0
Using sprockets 3.7.2
Using warden 1.2.9
Using rack-attack 6.5.0
Using rack-cors 1.1.1
Using rack-protection 2.1.0
Using rack-proxy 0.6.5
Using sitemap_generator 6.1.2
Using addressable 2.7.0
Using autoprefixer-rails 10.2.4.0
Using aws-sigv4 1.2.3
Using bootsnap 1.7.4
Using sassc 2.4.0
Using crack 0.4.5
Using unf 0.1.4
Using haml 5.2.1
Using ruby_parser 3.15.1
Using rb-inotify 0.10.1
Using mustermann 1.1.1
Using thwait 0.2.0
Using sidekiq 6.2.1
Using websocket-extensions 0.1.5
Using activesupport 6.1.3.2
Using aws-sdk-core 3.114.0
Using simpleidn 0.2.1
Using et-orbi 1.2.4
Using faker 2.17.0
Using sass-listen 4.0.0
Using launchy 2.5.0
Using listen 3.1.5
Using rspec-core 3.10.1
Using rspec-expectations 3.10.1
Using rspec-mocks 3.10.2
Using selenium-webdriver 3.142.7
Using simplecov 0.21.2
Using sinatra 2.1.0
Using webmock 3.12.2
Using erubi 1.10.0
Using mini_mime 1.0.3
Using racc 1.5.2
Using ruby_http_client 3.5.2
Using nokogiri 1.11.3
Using websocket-driver 0.7.3
Using globalid 0.4.2
Using activemodel 6.1.3.2
Using mail 2.7.1
Using aws-sdk-kms 1.43.0
Using dnsruby 1.61.5
Using factory_bot 6.1.0
Using fugit 1.4.5
Using sass 3.7.4
Using jbuilder 2.11.2
Using rspec 3.10.0
Using sendgrid-ruby 6.4.0
Using shoulda-matchers 4.5.1
Using simplecov-rcov 0.2.3
Using split 3.4.1
Using spring-watcher-listen 2.0.1
Using rails-dom-testing 2.0.3
Using loofah 2.9.1
Using activejob 6.1.3.2
Using activerecord 6.1.3.2
Using aws-sdk-s3 1.93.1
Using xpath 3.2.0
Using html2haml 2.2.0
Using roo 2.8.3
Using rspec-wait 0.0.9
Using rufus-scheduler 3.7.0
Using webdrivers 4.6.0
Using rails-html-sanitizer 1.3.0
Using sidekiq-scheduler 3.0.1
Using capybara 3.35.3
Using counter_culture 2.8.0
Using actionview 6.1.3.2
Using kaminari-activerecord 1.2.1
Using actionpack 6.1.3.2
Using kaminari-actionview 1.2.1
Using nonschema_migrations 5.0.2
Using actionmailer 6.1.3.2
Using railties 6.1.3.2
Using sprockets-rails 3.2.2
Using kaminari 1.2.1
Using activestorage 6.1.3.2
Using activerecord-session_store 2.0.0
Using font_awesome5_rails 1.4.0
Using actioncable 6.1.3.2
Using haml-rails 2.0.1
Using sass-rails 5.1.0
Using jquery-rails 4.4.0
Using rspec-rails 5.0.1
Using web-console 4.1.0
Using webpacker 5.2.1
Using actionmailbox 6.1.3.2
Using actiontext 6.1.3.2
Using sassc-rails 2.1.2
Using responders 3.0.1
Using bootstrap 4.4.1
Using rails 6.1.3.2
Using factory_bot_rails 6.1.0
Using devise 4.7.3
Using turbo-rails 0.5.9 from https://github.com/hotwired/turbo-rails.git (at main@2945dcb)
Using stimulus-rails 0.2.3
Using stripe-rails 2.3.0
Using universal-track-manager 0.6.1.alpha
Using paranoia 2.4.3
Using spf-query 0.1.5 from https://github.com/trailofbits/spf-query.git (at master@6dac502)
Installing mysql2 0.5.3 with native extensions
Using hot-glue 0.1.1
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    current directory: /Users/jason/.rvm/gems/ruby-2.6.6/gems/mysql2-0.5.3/ext/mysql2
/Users/jason/.rvm/rubies/ruby-2.6.6/bin/ruby -I /Users/jason/.rvm/rubies/ruby-2.6.6/lib/ruby/site_ruby/2.6.0 -r
./siteconf20210604-8580-1kmtwzs.rb extconf.rb
checking for rb_absint_size()... yes
checking for rb_absint_singlebit_p()... yes
checking for rb_wait_for_single_fd()... yes
-----
Using mysql_config at /opt/homebrew/bin/mysql_config
-----
checking for mysql.h... yes
checking for errmsg.h... yes
checking for SSL_MODE_DISABLED in mysql.h... yes
checking for SSL_MODE_PREFERRED in mysql.h... yes
checking for SSL_MODE_REQUIRED in mysql.h... yes
checking for SSL_MODE_VERIFY_CA in mysql.h... yes
checking for SSL_MODE_VERIFY_IDENTITY in mysql.h... yes
checking for MYSQL.net.vio in mysql.h... yes
checking for MYSQL.net.pvio in mysql.h... no
checking for MYSQL_ENABLE_CLEARTEXT_PLUGIN in mysql.h... yes
checking for SERVER_QUERY_NO_GOOD_INDEX_USED in mysql.h... yes
checking for SERVER_QUERY_NO_INDEX_USED in mysql.h... yes
checking for SERVER_QUERY_WAS_SLOW in mysql.h... yes
checking for MYSQL_OPTION_MULTI_STATEMENTS_ON in mysql.h... yes
checking for MYSQL_OPTION_MULTI_STATEMENTS_OFF in mysql.h... yes
checking for my_bool in mysql.h... no
-----
Don't know how to set rpath on your system, if MySQL libraries are not in path mysql2 may not load
-----
-----
Setting libpath to /opt/homebrew/Cellar/mysql/8.0.25_1/lib
-----
creating Makefile

current directory: /Users/jason/.rvm/gems/ruby-2.6.6/gems/mysql2-0.5.3/ext/mysql2
make "DESTDIR=" clean

current directory: /Users/jason/.rvm/gems/ruby-2.6.6/gems/mysql2-0.5.3/ext/mysql2
make "DESTDIR="
compiling client.c
compiling infile.c
compiling mysql2_ext.c
compiling result.c
compiling statement.c
linking shared-object mysql2/mysql2.bundle
ld: library not found for -lzstd
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [mysql2.bundle] Error 1

make failed, exit code 2

Gem files will remain installed in /Users/jason/.rvm/gems/ruby-2.6.6/gems/mysql2-0.5.3 for inspection.
Results logged to /Users/jason/.rvm/gems/ruby-2.6.6/extensions/-darwin-20/2.6.0/mysql2-0.5.3/gem_make.out

An error occurred while installing mysql2 (0.5.3), and Bundler cannot continue.
Make sure that `gem install mysql2 -v '0.5.3' --source 'https://rubygems.org/'` succeeds before bundling.

In Gemfile:
  mysql2
jason@MacBook-Air  %


我已经成功地运行了brew install mysql.
警告:mysql 8.0.25_1已经安装并且是最新的。要重新安装8.0.25_1,请运行:brew reinstall mysql

wribegjk

wribegjk1#

第一步

确认你已经通过brew安装了openssl和MySQL
第一个月
brew install openssl
或者如果你有以前版本的openssl试试
brew reinstall openssl@3

第二步

在你的Rails应用程序上运行这个命令,确保你可以通过Replayer:

gem install mysql2 -v '0.5.3' -- --with-opt-dir=$(brew --prefix openssl) --with-ldflags=-L/opt/homebrew/opt/zstd/lib

字符串
有两件事要注意:$(brew --prefix openssl)动态地将$(...)评估中的内容替换到您机器上的openssl目录中。
/opt/homebrew/opt/zstd实际上是指向您机器上当前版本的zstd的一个符号链接(它链接到类似/opt/homebrew/opt/Cellar/zstd/1.5.2的东西)

第三步

如果你想在全球范围内这样做,运行这个:

bundle config --global build.mysql2 "--with-opt-dir=$(brew --prefix openssl) --with-ldflags=-L/opt/homebrew/opt/zstd/lib"


请注意,这将更改您的~/.bundler/config文件,然后全局应用到xmller

jexiocij

jexiocij2#

在M1上安装mysql 2-v 0.4.1时出现同样的错误
--解决了--

brew install zstd

which zstd

字符串
我的路径是-> /opt/homebrew/bin/zstd
你需要检查zstd从哪里链接

cd /opt/homebrew/bin
ls -la


zstd -> ../Cellar/zstd/1.5.0/bin/zstd
所以你需要得到zstd库的路径,我的是:

/opt/homebrew/Cellar/zstd/1.5.0/lib


然后用一些魔术来做经典组合

bundle config --local build.mysql2 "--with-ldflags=-L/opt/homebrew/Cellar/zstd/1.5.0/lib"
bundle install

gem list my                                                                                                 

*** LOCAL GEMS ***

mysql2 (0.4.10)

xwbd5t1u

xwbd5t1u3#

这就是我在M1上工作的原因。
首先确保你已经安装了mysql和openssl与Homebrew

brew install mysql
brew install openssl

字符串
然后手动为mysql 2的安装设置这些值。我的zstd路径与mysql 2相同,所以一定要遵循他们的指示并适当地更改--with-ldflags选项。

bundle config --local build.mysql2 "--with-opt-dir="$(brew --prefix openssl) --with-ldflags=-L/opt/homebrew/Cellar/zstd/1.5.0/lib""

bvn4nwqk

bvn4nwqk4#

我在M1芯片上使用MacOS 11.6(Big Sur)时发生了这种情况。
尝试

brew install mysql

字符串
然后

gem install mysql2 -- --with-opt-dir="$(brew --prefix zstd)"


这对我很有效
如果可以,那么使用下面的命令来配置Bundler为你做这件事(在这个目录中,即“local”):

bundle config --local build.mysql2 "--with-opt-dir="$(brew --prefix zstd)""


那么bundle install应该可以工作。

7rtdyuoh

7rtdyuoh5#

在ruby 3.3.0上,我将其配置如下:

bundle config --local build.mysql2 "--with-opt-dir="#(brew --prefix zstd)" --with-ldflags=-L"$(brew --prefix zstd)"/lib"

字符串
我必须设置--with-opt-dir--with-ldflags,它工作。

相关问题