MEX ファイル実行時の「version 'GLIBCXX_#.#.##'not found」というエ​ラーを解決するにはど​うすればよいですか?

C++ による共有ライブラリにリンクする MEX ファイルを生成しました。この MEX ファイルは、Ubuntu 20.04 では正常に動作しており Ubuntu 22.04 にアップグレードした後も動作しました。
次に C ラッパーコードを変更した後 MATLAB R2022b を使用して MEX ファイルを正常に再構築しました。この MEX ファイルを呼び出そうとすると以下のエラーが発生しました
無効な MEX ファイル '.../decodeBitMatrix_mex.mexa64': /usr/local/MATLAB/R2022b/bin/glnxa64/../../sys/os/glnxa64/libstdc++.so.6: version 'GLIBCXX_3.4.29' not found (required by .../decodeBitMatrix_mex.mexa64)
確認したところ、私の Ubuntu 22.04 システムの libstdc++ には MATLAB に同梱されているバージョンよりも 2 つ新しいバージョンがありました。確認したところ、私の Ubuntu 22.04 システムの libstdc++ には MATLAB に同梱されているバージョンよりも 2 つ新しいバージョンがありました。
$ strings /usr/local/MATLAB/R2022b/bin/glnxa64/../../sys/os/glnxa64/libstdc++.so.6 | grep GLIBCXX_3.4 | tail -4 GLIBCXX_3.4.25 GLIBCXX_3.4.26 GLIBCXX_3.4.27 GLIBCXX_3.4.28 $ strings /lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX_3.4. | tail -4 GLIBCXX_3.4.27 GLIBCXX_3.4.28 GLIBCXX_3.4.29 GLIBCXX_3.4.30
同じバージョンの libstdc++ を使用するように MATLAB またはシステムを設定するにはどうすればよいですか?

 Accepted Answer

このエラーは、Ubuntu 22.04 に同梱されている libstdc++ ライブラリと MATLAB R2022b の不一致が原因です。現在のバージョンと以前のバージョンでサポートされている互換性のあるコンパイラについては以下で確認できます:
回避策として、MATLAB に同梱されているバージョンではなく、システムの libstdc++ ライブラリを指定して使用する方法があります。これは、MATLAB を起動する前に次の環境変数を設定することで可能です。
LD_PRELOAD=/lib/x86_64-linux-gnu/libstdc++.so.6 matlab
これにより GLIBCXX バージョンでシステム libstdc++ を強制的にロードできます。上記のコマンドは MATLAB の環境変数のみを設定することにご注意ください。現在のシェルの他のプロセスに設定するには、代わりに次のコマンドを使用します。
export LD_PRELOAD=/lib/x86_64-linux-gnu/libstdc++.so.6 matlab
上記の方法にて次のようなエラーが表示される場合、
.MathWorks/ServiceHost/-mw_shared_installs/v2024.9.0.2/bin/glnxa64/MathWorksServiceHost: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by ........)
このエラーは MathWorks ServiceHost に同梱されている 'libstdc++' ライブラリのバージョンが、システムの 'libstdc++' ライブラリよりも新しいことを意味しています。問題を解決するには、次のいずれかの手順を実行します。
1. システムの 'libstdc++' ライブラリ バージョンを新しいバージョンにアップグレードし、前述のように 'LD_PRELOAD' がこのライブラリを指すように設定します。
2. 次のように 'LD_PRELOAD' パスを変更して、MathWorks ServiceHost ライブラリを指すようにします。
LD_PRELOAD=~/.MathWorks/ServiceHost/-mw_shared_installs/VERSION/bin/glnxa64/../../sys/os/glnxa64/libstdc++.so.6 matlab
また、現在のシェルの他のプロセスに設定するには、次のコマンドを使用します。
export LD_PRELOAD=~/.MathWorks/ServiceHost/-mw_shared_installs/VERSION/bin/glnxa64/../../sys/os/glnxa64/libstdc++.so.6 matlab
ここで、「VERSION」は、現在の MATLAB バージョンに一致する MathWorks ServiceHost の最新バージョンです。たとえば、MATLAB R2024a を使用している場合、ServiceHost のバージョンは「v2024.9.0.2」になります。

More Answers (0)

Categories

Find more on MATLAB Coder in Help Center and File Exchange

Products

Release

R2022b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!