rubyインストールでconfigure: error: something wrong with LDFLAGS=”-L…”

結論:.bash_profileに書いてあった
export LIBRARY_PATH=”LIBRARY_PATH: usr/lib:/usr/local/lib”
が原因。。
export LIBRARY_PATH=$LIBRARY_PATH:”/usr/lib:/usr/local/lib”
もしくは
export LIBRARY_PATH=”/usr/lib:/usr/local/lib”:$LIBRARY_PATH

プロローグ
cocoapodsで新しいライブラリを追加しようとしたものの

LoadError: dlopen(/Users/hoge/.rbenv/versions/2.2.3/lib/ruby/2.2.0/x86_64-darwin17/openssl.bundle, 9): Library not loaded: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib
Referenced from: /Users/hoge/.rbenv/versions/2.2.3/lib/ruby/2.2.0/x86_64-darwin17/openssl.bundle
Reason: image not found - /Users/hoge/.rbenv/versions/2.2.3/lib/ruby/2.2.0/x86_64-darwin17/openssl.bundle

という嫌な感じのエラーで更新できず。

とりあえず他の人のpodsを持ってきてしのいだものの、(気持ち的に)どこか引っかかる感じ。

その後Railsでrake db/migrateしても同様のエラーが。。(こちらの解決はエピローグに)
こちらは急ぎなのでなんとかしないと、、とあせり、とりあえずその時の環境をrubyの再インストールで思い

$ rbenv install 2.2.3

としたところ冒頭の

checking whether CFLAGS is valid... yes
checking whether LDFLAGS is valid... no
configure: error: something wrong with LDFLAGS="-L/Users/hoge/.rbenv/versions/2.2.3/lib "

somethingて何でしょう。。
somethingじゃ手も足も出ないのでこちらの記事からrbenv install途中の状態がわかるということで

rbenvでruby2.1.1がインストールできないので、ソースコードからmake installでコンパイルした

で -k のオプションでソースを残しておなじみのconfigure, make, make installができるということを知り試す。

configureのシェルスクリプトを見て
ac_fn_c_try_link()
で失敗すると
“something wrong with LDFLAGS=\”$LDFLAGS\”” “$LINENO” 5
となることを確認。
どうにかこのconfigureをデバッグできないかと思い調べてたらbashdbなる素敵なツールがあることを知り、homebrewからインストール(この辺から若干横道)。
ブレークポイントやらステップ実行やらを堪能したもののac_fn_c_try_linkでダメになっていることを再確認した程度。。
結局、失敗したときにconftest.errというファイルができるので、ファイルがあったら失敗として終わる、ということのようなので、そのconftest.errを自分のディレクトリにコピーするようにしてみる(そのままだとすぐ消える)。

eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
$as_echo "$ac_try_echo"; } >&5
(eval "$ac_link") 2>conftest.err
cp conftest.err /Users/hoge/Develop/Makefile/20191215/conftest.err.160305/conftest.err.$1
ac_status=$?
if test -s conftest.err; then
grep -v '^ *+' conftest.err >conftest.er1
cat conftest.er1 >&5
mv -f conftest.er1 conftest.err
fi


cp conftest.err /Users/hoge/Develop/Makefile/20191215/conftest.err.160305/conftest.err.$1

が追加された部分です。

で、conftest.err.7875とかそんな感じの名前(最後の数字は呼び出し元の行数)の中身を見ると

ld: warning: directory not found for option '-LLIBRARY_PATH'

とのこと。最初のうちは警告なのでまあいいか、と思って先の「cp」を「mv」で移動して強制的(?)にconfigureを最後まで行かせたものの、うまくいく気がしないのでbashdbでいろいろこねくり回していました。
当然

$ echo $LIBRARY_PATH
LIBRARY_PATH:/usr/lib:/usr/local/lib

とやってみて/usr/libもあるし/usr/local/libもあることは確認済み。
。。。と何も悪くないのにと思って半日過ごしたが、.bash_profileを見てみると(冒頭の)

export LIBRARY_PATH="LIBRARY_PATH: usr/lib:/usr/local/lib"

書いたとおり「LIBRARY_PATH」の文字が出ていたようでした。。
代入するLIBRARY_PATHの先頭に$をつけて新しいシェルからrbenv installしたらうまく行きました。
なかなか(お間抜け具合が)レアなケースかと思うのでいくら検索した結果を試してもダメなわけでした。。

数日前のopenssl関連の何かが起きた!というバイアスでかなり遠回りしてしまったので、検索した結果を試してもダメなときは基本的なこと(自分の間抜けさ)を見直す、という事が肝要、と思いましたとさ。

プロローグ
恐らくrubyの再インストールでも良かったのかと思いますが、上記過程で何度もインストールされた古いopenssl(1.0.0系)を

9): Library not loaded: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib

で無いよ!と言われているディレクトリに(Finderで)コピーしました。
一応1.0.2qとかsなのでHeartbleed対策できている版と思いたい。
下記2個のファイルを
/usr/local/Cellar/openssl/1.0.2s/lib/libcrypto.1.0.0.dylib
/usr/local/Cellar/openssl/1.0.2s/lib/libssl.1.0.0.dylib
以下にコピーしたところ何事もなかったように動きました。。
/usr/local/opt/openssl/lib/
(参照先は1.1.1dのディレクトリなので1.0.0と1.1が混在、、いいのかな。。)


コメントを残す

メールアドレスが公開されることはありません。

4 + = 7