1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ld: library not foundの解決方法

Posted at

bundle installでmysql2を入れるときにハマったのでメモ

TL;DR

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

エラー内容

...
ld: library not found for -lssl```
要はlinkerがlocal上にあるはずのライブラリを見つけることができなかったらしい

gemはlocal上にあるライブラリに依存しているので、**ライブラリの場所を指定することで対処できる**

# 依存ライブラリ指定の仕方
gcc等の通常のコンパイラであれば以下のようにライブラリを指定することができる
```LDFLAGS="-L/usr/local/opt/openssl/lib" CPPFLAGS="-I/usr/local/opt/openssl/include" PKG_CONFIG_PATH="/usr/local/opt/openssl/lib/pkgconfig"```
しかしbundleコマンドやgemコマンドではこの方法が通用しない

それぞれの指定方法を紹介する

## gem installの場合
gemコマンドの場合以下のようにライブラリを指定することができる
`gem install ジェムの名前 -- --with-環境変数=ライブラリのパス`

今回の場合は
`gem install mysql2 -- --with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include`
でインストールすることができた。

## bundle installの場合
local上にgemをインストールせず、bundle installしたい場合、以下のように特定のgemをインストールする際のライブラリを指定することができる
`bundle config --local build.ジェムの名前 --with-環境変数=ライブラリのパス`

今回の場合は
`bundle config --local build.mysql2 --with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include`
でインストールすることができた

# 参考
https://qiita.com/ts-3156/items/d53915307c77674b50ae
https://stackoverflow.com/questions/23559027/gem-install-with-additional-include-and-lib-paths
https://guides.rubygems.org/command-reference/#extension-install-failures
https://bundler.io/v1.16/bundle_config.html#BUILD-OPTIONS
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?