始める前に、この投稿に別のタイトルを付けさせてください。
インテル® MKL で CVXOPT をコンパイルする方法は?
CVXOPT の __init__.py をインテル® MKL でコンパイルするように変更するにはどうすればよいですか?
問題を説明しましょう。Enthought python は Ubuntu パッケージ マネージャーの python と比較して大幅な速度向上を提供するため、Enthought python で pystruct をインストールしようとしています。高速化は主に、インテル® MKL ライブラリーを使用してバックエンドの線形代数ライブラリーをコンパイルしたことによるものです。CVXOPT と pystruc は gnu python でうまく動作すると言わざるを得ません。
Enthought python (Canopy 以前の EPD) で CVXOpt をインストールしようとした人がいるかどうか疑問に思っていました。インテル® MKL でコンパイルする必要があります。
CVXOPT をビルドして Python でインポートしようとすると、次のエラーが発生します (リンカー エラーのようです)。
>>> import cvxopt
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "cvxopt/__init__.py", line 32, in <module>
import cvxopt.base
ImportError: /home/kayhan/Enthought/Canopy_64bit/User/bin/../lib/libgfortran.so.3: version `GFORTRAN_1.4' not found (required by /usr/lib/liblapack.so.3gf)
しかし、デフォルトのpythonでインポートしようとすると、エラーは発生しません(テストも機能します)。
問題は、間違ったライブラリへのリンクにあると思います。また、MKL に関して CVXOPT を再コンパイルする必要がある場合に備えて、INTEL MKL も持っています (blas Enthought のバージョンが使用されているようです)。ドキュメンテーションには、Enthough で動作させる方法についての説明が見つかりませんでした。アドバイスをお願いします。
更新:前述したように、CVXOPT は gnu python でコンパイルおよび実行されます。私は次のトリックを行いましたが、これはあまり良い考えではありませんが、うまくいきます:
LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libfreetype.so:/usr/lib/x86_64-linux-gnu/libgfortran.so.3 python
この投稿から学んだこと: ( libgfortran: version `GFORTRAN_1.4' not found )
さて、問題は、これを行うためのクリーンな方法は何ですか? 1 つのパッケージに対してのみライブラリをプリロードするにはどうすればよいですか。またはインテル® MKL で CVXOPT をコンパイルし、ライブラリーをプリロードする必要はありませんか?
ありがとう、
ケイハン