起きた問題の内容
intelMKLを利用するFortranライブラリをPythonからCtypesを用いて利用する際にNumpyと併用しようとすると以下のエラーが出た。行った対処法と情報ソースをメモとして残す。
MKL FATAL ERROR: Cannot load neither libmkl_avx.so nor libmkl_def.so
環境は以下の通り
- Python 3.6.3
- Ubuntu 16.04.4
- Numpy 1.14.5
- MKL 2018 update?
対応
.bashrcにて次のような環境変数を追加した。
export LD_PRELOAD=/opt/intel/mkl/lib/intel64/libmkl_core.so:/opt/intel/mkl/lib/intel64/libmkl_sequential.so
LD_PRELOADに登録すると同じ関数が複数見つかった場合、LD_PRELOADの対象となるライブラリのものを優先して利用するようになるらしい。
原因と情報ソース
Numpy内部で利用しているMKLとFortranで利用している。MKLが干渉してしまっているようだ。NumpyのMKLの関数と自分でインストールしたMKLのどちらを利用してよいか混乱している状態というところだろうか?
この対応によってNumpy側のMKL利用時に問題が生じないかどうかは検討していないので、副作用には要注意かもしれない。
下記リンク先の情報を参照している。
StackOverFlow:
https://stackoverflow.com/questions/13951953/linking-intels-mkl-within-python-c-c-fortran-2003-program
上のStackOverFlowフォーラムにて回答してくれてる方のブログ:
http://debugjournal.tumblr.com/post/98401758462/intel-mkl-dynamic-link-library-error
Intel Forumの関連投稿:
https://software.intel.com/en-us/forums/intel-math-kernel-library/topic/300857