Help us understand the problem. What is going on with this article?

Mastodonのアプデでハマったエラー

概要

マストドンのアップデートでbundle installは通るんだけど、
db:migrateとかだけ失敗するという怪現象が起きたのでその検証。

環境

OS: CentOS7
Ruby: 2.6.5
Cld: 3.2.4
ProtocolBuffer:3.11.2

こんなエラーが出た時

LoadError: Could not open library '/home/mastodon/live/vendor/bundle/ruby/2.6.0/gems/
cld3-3.2.4/lib/../ext/cld3/libcld3.so': /home/mastodon/live/vendor/bundle/ruby/2.6.0/
gems/cld3-3.2.4/lib/../ext/cld3/libcld3.so: undefined symbol: _ZNK6google8protobuf11M
essageLite25InitializationErrorStringB5cxx11Ev

結論から先に書いておくと、yumで入っているProtocolBufferのライブラリと自分でソースからコンパイルしたProtocolBufferなどライブラリの複数が共存していると発生。
インストール時と実行時でライブラリが異なってしまうとアウト。

このエラーのミソは「B5cxx11Ev」という部分だった。
これはRHEL系OS上のコンパイラでコンパイルされたsoファイル
(yumで持ってきたやつ)の中身に付く識別子らしい。

参考

https://github.com/linkinpark213/linkinpark213.github.io/issues/12#issuecomment-455960955
https://linkinpark213.com/2018/11/18/densepose-minesweeping/#2-10-Undefined-symbol-ZN6caffe219CPUOperatorRegistryB5cxx11Ev

対応

バージョンが古い方(おそらくはyumの方)を消してしまおう。

yumで入れた方を消す場合

sudo yum -y remove protobuf

ビルドした方を消す場合

ビルドしたディレクトリ(usr/local/src/proto-buffer.hoge/build/)で
sudo make uninstall clean

また、cld3は下記で一度アンインストールして、改めてbundle installしなおそう。

RAILS_ENV=production bundle exec gem uninstall cld3

参考資料

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした