代码之家  ›  专栏  ›  技术社区  ›  Tarta

ld:安装mysql2 gem时找不到-lzstd的库

  •  0
  • Tarta  · 技术社区  · 2 年前

    在运行bundle安装时

    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应用程序6.1.3

    捆绑包版本2.2.19

    马科斯大苏尔11.4

    苹果M1

    在档案里

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

    在档案里。锁定mysql为0.5.3

    当我跑的时候 bundle install 它与正常情况发生冲突:

    enter image description here

    检查生成错误(显示在输出的前面),生成错误显示为:(完整结果如下)

     ld: library not found for -lzstd
    

    全部结果来自 捆绑安装

    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重新安装mysql

    0 回复  |  直到 3 年前
        1
  •  38
  •   Jason FB    3 年前

    第一步 :

    确认已通过brew安装openssl和MySQL

    brew install mysql

    brew install openssl

    或者,如果您有以前版本的openssl,请尝试

    brew reinstall openssl@3

    第二步 :

    在Rails应用程序上运行此应用程序,确保您可以通过bundler:

    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 文件,然后全局应用于bundler

        2
  •  28
  •   Octocat    3 年前

    尝试在M1上安装mysql2-V0.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 lib的路径,我的是:

    /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)
    
        3
  •  17
  •   marcus.salinas    3 年前

    这就是我在M1上工作的原因。

    首先确保安装了mysql,并使用自制的openssl

    brew install mysql
    brew install openssl
    

    然后手动为mysql2的安装设置这些值。我的zstd路径与Octocats相同,所以一定要按照他们的指示,适当地更改--with ldflags选项。

    bundle config --local build.mysql2 "--with-opt-dir="$(brew --prefix openssl) --with-ldflags=-L/opt/homebrew/Cellar/zstd/1.5.0/lib""
    
        4
  •  9
  •   Rob Simpson    3 年前

    这发生在我在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 应该有用。