在开始之前,让我为这篇文章添加替代标题:
如何使用英特尔 MKL 编译 CVXOPT?
如何更改 CVXOPT 中的 __init__.py 以使用英特尔 MKL 进行编译?
让我解释一下这个问题。我正在尝试使用 Enthought python 安装 pystruct,因为与 Ubuntu 包管理器中的 python 相比,Enthought python 提供了显着的速度。加速主要是由于使用英特尔 MKL 库编译后端线性代数库。我不得不说 CVXOPT 和 pystruc 与 gnu python 配合得很好。
我想知道是否有人尝试使用 Enthought python(Canopy 以前的 EPD)安装 CVXOpt?它需要使用英特尔 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 正在使用的版本)。我在文档中找不到任何说明如何使其与 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:未找到版本“GFORTRAN_1.4”)
现在,问题是这样做的干净方法是什么?我怎样才能只为一个包预加载库。或者使用英特尔 MKL 编译 CVXOPT 并且根本不需要预加载库?
谢谢,
凯汉