ld: library not found for -lssl while installing mysql2 gem
Asked Answered
S

4

15

I changed mysql2 version in my project's Gemfile from 0.3.20 to 0.5.2. When I run bundle update mysql2 I get the following error:

Fetching mysql2 0.5.2 (was 0.3.21)
Installing mysql2 0.5.2 (was 0.3.21) with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    current directory: /Users/hirurg103/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/mysql2-0.5.2/ext/mysql2
/Users/hirurg103/.rbenv/versions/2.4.1/bin/ruby -I /Users/hirurg103/.rbenv/versions/2.4.1/lib/ruby/site_ruby/2.4.0 -r ./siteconf20190715-35076-13r30uh.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 /usr/local/opt/[email protected]/bin/mysql_config
-----
checking for mysql.h... yes
checking for errmsg.h... yes
checking for SSL_MODE_DISABLED in mysql.h... no
checking for MYSQL_OPT_SSL_ENFORCE in mysql.h... no
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... 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/opt/[email protected]/lib
-----
creating Makefile

current directory: /Users/hirurg103/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/mysql2-0.5.2/ext/mysql2
make "DESTDIR=" clean

current directory: /Users/hirurg103/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/mysql2-0.5.2/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 -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/hirurg103/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/mysql2-0.5.2 for inspection.
Results logged to /Users/hirurg103/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/extensions/x86_64-darwin-18/2.4.0-static/mysql2-0.5.2/gem_make.out

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

My setup:

mysql: Ver 14.14 Distrib 5.6.42, for osx10.14 (x86_64) using EditLine wrapper

OS: MacOS Mojave 10.14.2

How can I fix this error?

Simonesimoneau answered 15/7, 2019 at 20:56 Comment(0)
S
44

I was able to solve this problem with the following command:

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

and then

bundle install

UPDATE:

OpenSSL 1.0 reached EOL on 2019-12-31. After Mac OS and Homebrew packages upgrade you will need to specify paths to [email protected]:

gem install mysql2 -v 0.5.2 -- --with-cflags=\"-I/usr/local/opt/[email protected]/include\" --with-ldflags=\"-L/usr/local/opt/[email protected]/lib\"
Simonesimoneau answered 16/7, 2019 at 11:6 Comment(4)
I was having an issue with starting the rails server, I had an error that said dependent dylib 'libssl.1.1.dylib' not found. Your solution of reinstalling mysql2 with those flags worked. Thank you!Tamishatamma
The update suggest using 0.4.4; that instruction works, but you can also use the 0.5.2 with the [email protected] flags. Perhaps the UPDATE needs adjusting to reflect this (instead of downgrading the gem to 0.4.4).Encamp
This works for gem install, but in my case it's still failing in bundle install. I'm guessing it has to do with bundling gems into the vendor directory, so I'm looking for a way to set these parameters within bundle.Laud
And the answer is bundle config --local build.mysql2 --with-ldflags=-L/usr/local/opt/openssl/lib, found by reading https://mcmap.net/q/821743/-mysql2-gem-fails-on-bundle-install-despite-installing-using-gem-install-command and gist.github.com/fernandoaleman/…Laud
R
3

On macOS Big Sur I used the following commands to get the mysql2 gem installed:

brew install openssl
gem install mysql2 -v '0.5.3' -- --with-ldflags=-L/usr/local/opt/openssl/lib
Recessive answered 20/10, 2021 at 12:22 Comment(1)
this worked for me on Monterey, thx!Yentai
I
3

Homebrew moved files around, here is what works now 2022-04:

  • Macbook Arm M1
  • MacOS Monterey 12.3.1
  • Homebrew 3.4.7
gem install mysql2 -v '0.5.3' -- \
--with-cflags=\"-I/opt/homebrew/opt/openssl/include\" \
--with-ldflags=\"-L/opt/homebrew/opt/openssl/lib\"
Indeterminism answered 18/4, 2022 at 14:58 Comment(0)
T
0

I've fixed it installing the missing the package libssl-dev (on a Debian derivative).

Topmast answered 6/2, 2020 at 14:17 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.