在开始之前,让我为这篇文章添加替代标题:
如何使用 Intel MKL 编译 CVXOPT?
如何更改 CVXOPT 中的 __init__.py 以使用 Intel MKL 进行编译?
让我解释一下这个问题。我正在尝试使用 Enthought python 安装 pystruct,因为与 Ubuntu 包管理器中的 python 相比,Enthought python 提供了显着的速度。加速主要归功于使用英特尔 MKL 库编译后端线性代数库。我不得不说 CVXOPT 和 pystruc 与 gnu python 配合得很好。
我想知道是否有人尝试使用 Enthought python (Canopy 以前的 EPD)安装 CVXOpt ?它需要使用 Intel MKL 进行编译。
当我构建 CVXOPT 并尝试将其导入 Enthought 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 中导入它,我不会收到错误(测试也有效)。
我猜问题是链接到错误的库。我还有 INTEL MKL,以防我需要根据 MKL 重新编译 CVXOPT(这似乎是 blas Enthought 正在使用的版本)。我在文档中找不到任何说明如何让它与 Enthought 一起工作,请告知。
UPDATE:正如我之前提到的,CVXOPT 使用 gnu python 编译和运行。我做了以下的技巧,看起来不是一个好主意,但它有效:
LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libfreetype.so:/usr/lib/x86_64-linux-gnu/libgfortran.so.3 python
我从这篇文章中学到的:(libgfortran:找不到版本“GFORTRAN_1.4” https://stackoverflow.com/questions/9628273/libgfortran-version-gfortran-1-4-not-found)
现在的问题是执行此操作的干净方法是什么?如何只为一个包预加载库。或者使用 Intel MKL 编译 CVXOPT 而根本不需要预加载库?
Thanks,
Kayhan