gemインストール時にUndefined symbols for architecture arm64と出たときの対応
gemをインストールをしようとして、以下のようなエラーが出た場合の対応方法。
自分の場合、M1のMacにgemをインストールしようとしたらこんな結果が返ってきちゃう。
Undefined symbols for architecture arm64:
"_ruby_abi_version", referenced from:
-exported_symbol[s_list] command line option
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [grpc_c.bundle] Error 1
とりあえず、gemコマンドに以下のようなオプション(--with-ldflags="-undefined dynamic_lookup"
)をつけて実行するとインストールができました。
私はgrpcというgemを入れようとしたときにこのエラーに遭遇。
$ gem install grpc -v 1.50.0 -- --with-ldflags="-undefined dynamic_lookup"
railsのGemfileに設定している場合はbundle config
で事前に同様のオプションを設定しておいて、bundle install
でOK
$ bundle config build.grpc --with-ldflags="-undefined dynamic_lookup"
$ bundle install
参考にした情報はこちらです。自分の場合、Rubyのリコンパイルは不要でした。その辺は環境によるかもです。
- Undefined symbol _ruby_abi_version regression with Xcode 13 -> 14
- Xcode 14な環境でnumo-linalgのインストールにundefined symbolsで失敗したらldflagsを指定する
ちなみに、grpc 1.50.2からは上記の問題は発生しませんでした。gem側で解決してくれているみたいです。
この記事の環境情報
- Ruby 3.1.3
- grpc 1.50.0
Rubyに関する他の記事を読む
- slimでtype='application/ld+json'のscriptタグを書く
- Slack APIによる自動メッセージでユーザーグループにメンションする方法
- RubyでUnixtimeからTimeオブジェクトを生成する
- RubyでUTCの時刻情報をJST基準に変換する
最近の記事を読む
- Flutterでcontextを使わずにlocale情報を取得する
- Cloud RunでIAPを有効にしようとしてハマったこと
- slimでtype='application/ld+json'のscriptタグを書く
- タグマネージャーでjsのloadイベントを発火させたいとき
- mysqlコマンドを実行してERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)と言われたら