使用 mysql2 gem 安装应用程序时出错

我尝试安装一个使用 mysql2 gem 的开源 Rails3.2.21应用程序,但是当我尝试运行 bundle注释时,我得到了以下错误:

Fetching: mysql2-0.3.18.gem (100%)
Building native extensions.  This could take a while...
p
ERROR:  Error installing mysql2:
ERROR: Failed to build gem native extension.


/Users/my_username/.rvm/rubies/ruby-2.1.2/bin/ruby -r ./siteconf20150614-72129-orqsb7.rb extconf.rb
checking for ruby/thread.h... yes
checking for rb_thread_call_without_gvl() in ruby/thread.h... yes
checking for rb_thread_blocking_region()... yes
checking for rb_wait_for_single_fd()... yes
checking for rb_hash_dup()... yes
checking for rb_intern3()... yes
-----
Using mysql_config at /usr/local/bin/mysql_config
-----
checking for mysql.h... yes
checking for errmsg.h... yes
checking for mysqld_error.h... yes
-----
Don't know how to set rpath on your system, if MySQL libraries are not in path mysql2 may not load
-----
-----
Setting libpath to /usr/local/Cellar/mysql/5.6.25/lib
-----
creating Makefile


make "DESTDIR=" clean


make "DESTDIR="
compiling client.c
compiling infile.c
compiling mysql2_ext.c
compiling result.c
linking shared-object mysql2/mysql2.bundle
ld: warning: directory not found for option '-L/Users/travis/.sm/pkg/active/lib'
ld: library not found for -lssl
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/my_username/.rvm/rubies/ruby-2.1.2/lib/ruby/gems/2.1.0/gems/mysql2-0.3.18 for inspection.
Results logged to /Users/my_username/.rvm/rubies/ruby-2.1.2/lib/ruby/gems/2.1.0/extensions/x86

我尝试卸载每个版本的 mysql我安装通过自制和重新安装,像这样:

brew uninstall --force mysql && brew install mysql

然后跑步:

sudo gem install mysql2

正如在这里提出的一些类似问题所建议的,但它仍然会导致同样的错误。

请问有人能提供指导,如何让这个启动和运行?

40646 次浏览

The error log says:

ld: library not found for -lssl

So, you need to install libssl:

brew install openssl

As it was pointed out in comments, there might be a need to export the path to the library.

export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/opt/openssl/lib/

Thanks @mudasobwa for pointing me in the right direction. It turns out the error was caused by an unlinked openssl file, so running:

brew reinstall openssl && brew link openssl --force

Solved the problem. I found the solution here: OpenSSL, RVM, Brew, conflicting error

For anybody still experiencing the issue:

When you install openssl via brew, you should get the following message:

Apple has deprecated use of OpenSSL in favor of its own TLS and crypto libraries

Generally there are no consequences of this for you. If you build your own software and it requires this formula, you'll need to add to your build variables:

LDFLAGS: -L/usr/local/opt/openssl/lib
CPPFLAGS: -I/usr/local/opt/openssl/include
PKG_CONFIG_PATH: /usr/local/opt/openssl/lib/pkgconfig

You can set these build flags (for the local application) by running the following:

bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include"

This worked for me.

See bundler's documentation for more information.

The solution for me was to install the Xcode Command Line Tools.

I had recently updated Xcode through the Mac App Store, and every time I do that, I've found that I have to reinstall the Command Line Tools again.

xcode-select --install
sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /

From here: https://gorails.com/setup/osx/10.14-mojave

I found that I had to use --with-opt-dir=/usr/local/opt.

Specifically, I added the following to my ~/.bundle/config file:

BUNDLE_BUILD__MYSQL2: "--with-opt-dir=/usr/local/opt"

Try this:

gem install mysql2 -v '0.5.2' -- --with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include

(Update version as appropriate)

Based on the solution here

brew install openssl


export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/opt/openssl/lib/

solved the problem.

The combination of commands solved it me. I am on Mojave.

brew reinstall openssl && brew link openssl --force

and then

gem install mysql2 -v '0.4.10' -- \
--with-ldflags=-L/usr/local/opt/openssl/lib \
--with-cppflags=-I/usr/local/opt/openssl/include

Seems that you miss the main files needed to build mysql2 gem

sudo apt-get install libsqlite3-dev libmysqlclient-dev -y

libsqlite3-dev is not mandatory but install it since it's the default rails DB.

After Homebrew update (openssl@1.1) there is a new path for libs, so may use:

bundle config build.mysql2 --with-opt-dir=$(brew --prefix openssl)
bundle install

It will fix ld: library not found for -lssl error

On MacBook air M1(macOS) it worked for me.

Install zstd

brew install zstd

Install mysql2

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

Mac Catalina using Homebrew fix: gem install mysql2 -- --with-opt-dir="$(brew --prefix openssl)"

Steps for me on Monterey M1 Mac

brew install openssl@3


brew install zstd


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


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


bundle install

the following command works for my Mac os 12.1 MacOs Monterey

 gem install mysql2 -v '0.5.3' -- \
--with-mysql-lib=/opt/homebrew/Cellar/mysql/8.0.28/lib \
--with-mysql-dir=/opt/homebrew/Cellar/mysql/8.0.28 \
--with-mysql-config=/opt/homebrew/Cellar/mysql/8.0.28/bin/mysql_config \
--with-mysql-include=/opt/homebrew/Cellar/mysql/8.0.28/include

Please refer this link for more details https://github.com/brianmario/mysql2/issues/1175

This finally worked for me on macOS Monterey 12.3 (M1 Pro):

 gem install mysql2 -- --with-mysql-dir=/opt/homebrew/Cellar/mysql/8.0.28_1

Make sure you read the installation instructions. Notable points for me were:

  • Make sure MySQL is installed (brew install mysql)
  • Make sure XCode select tools are installed (xcode-select --install)
  • Set the with-mysql-dir option to wherever mysql was installed (check with brew info mysql)

Combining the answers given by Aleksei Matiushkin and Alexey Mozorov fixed the problem for me.

But I also updated the openssl before adding the path.

Thanks!

I've been coding with mysql2 gem for years and have encountered with this issue time to time.

Today I found that this magic option -- --with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include no longer worked on my Mac. Indeed, it looks like the default location where brew installs openssl has changed:

$ brew reinstall openssl


...


If you need to have openssl@3 first in your PATH, run:
echo 'export PATH="/opt/homebrew/opt/openssl@3/bin:$PATH"' >> ~/.zshrc


For compilers to find openssl@3 you may need to set:
export LDFLAGS="-L/opt/homebrew/opt/openssl@3/lib"
export CPPFLAGS="-I/opt/homebrew/opt/openssl@3/include"

So following the message, I had to make a few changes to the command and got it work finally:

$ gem install mysql2 -v '0.5.3' -- --with-ldflags=-L/opt/homebrew/opt/openssl@3/lib --with-cppflags=-I/opt/homebrew/opt/openssl@3/include

Hope this will help someone!