我正在尝试在 Python 中使用 Pardiso 6 稀疏求解器库。问题是我似乎无法加载 Pardiso 共享对象 (SO)。这是我打电话时遇到的错误
import ctypes
pardiso = ctypes.CDLL(pardiso_so_address)
Traceback (most recent call last):
File "test.py", line 27, in <module>
pardiso = ctypes.CDLL(lib720)
File "/home/amin/anaconda3/envs/idp/lib/python3.7/ctypes/__init__.py", line 364, in __init__
self._handle = _dlopen(self._name, mode)
OSError: ./libpardiso600-GNU720-X86-64.so: undefined symbol: sgetrf_
如果有人能对此有所了解,我将不胜感激。
PS。我已经联系了 Pardiso 开发人员,他们告诉我需要链接优化的 BLAS,但我已经通过conda.
更新1:我mkl通过安装conda,但没有帮助。奇怪的是,我添加import scipy到标题中并且错误消失了。如果我添加import mkl. 因此,出于某种原因,除非scipy或mkl手动导入,否则.so不知道lapack安装存在。无论如何,现在又抛出了另一个错误,我认为这可能与libgfortran库有关。这是错误
Traceback (most recent call last):
File "test.py", line 34, in <module>
pardiso = ctypes.CDLL(lib720)
File "/home/amin/anaconda3/envs/test/lib/python3.7/ctypes/__init__.py", line 364, in __init__
self._handle = _dlopen(self._name, mode)
OSError: ./libpardiso600-GNU720-X86-64.so: undefined symbol: _gfortran_st_close
我仔细检查了是否libgfortran已安装,确实是:
(test) PyPardisoProject$ ldconfig -p | grep libgfortran
libgfortran.so.5 (libc6,x86-64) => /lib/x86_64-linux-gnu/libgfortran.so.5
libgfortran.so.4 (libc6,x86-64) => /lib/x86_64-linux-gnu/libgfortran.so.4
我认为类似的东西可能在起作用,即图书馆在那里但需要触发(类似于import scipy似乎已经为 所做的事情liblapack,但我不知道如何触发它。
注意:我在 Pardiso 网站上的 C 中找到了一个示例,并.so通过它测试了该文件
$ gcc pardiso_sym.c -o pardiso_sym -L . -lpardiso600-GNU720-X86-64 -llapack -fopenmp -lgfortran
$ OMP_NUM_THREADS=1 ./pardiso_sym
它没有问题(使用我机器上的现有库)。所以,.so作品,只是我不知道如何在 Python 中通知它它的依赖关系。
更新 2:这是输出ldd pardiso_sym:
因此,我添加了公共路径,即/lib/x86_64-linux-gnu和/lib64toPATH并通过以下方式再次运行 Python 脚本:
PATH=$PATH:/lib/x86_64-linux-gnu:/lib64 python padiso_script.py
但同样的错误被抛出。我也尝试添加LD_LIBRARY_PATH,但也没有工作。
皈依舞
人到中年有点甜
幕布斯7119047
相关分类