Python 将Anaconda MKL连接到C++/赛顿计划

Python 将Anaconda MKL连接到C++/赛顿计划,python,c++,numpy,cython,distutils,Python,C++,Numpy,Cython,Distutils,我试图编译一个Cython程序,但是我在尝试链接LAPACK和BLAS时出错(它找不到库)。我有Anaconda Accelerate,它会自动将MKL链接到NumPy,所以我尝试复制NumPy的链接 >>> import numpy as np >>> np.show_config() mkl_info: include_dirs = ['/home/ubuntu/miniconda3/envs/LDFMap/include'] define

我试图编译一个Cython程序,但是我在尝试链接LAPACK和BLAS时出错(它找不到库)。我有Anaconda Accelerate,它会自动将MKL链接到NumPy,所以我尝试复制NumPy的链接

>>> import numpy as np
>>> np.show_config()
mkl_info:
    include_dirs = ['/home/ubuntu/miniconda3/envs/LDFMap/include']
    define_macros = [('SCIPY_MKL_H', None)]
    libraries = ['mkl_intel_lp64', 'mkl_intel_thread', 'mkl_core', 'iomp5', 'pthread']
    library_dirs = ['/home/ubuntu/miniconda3/envs/LDFMap/lib']
blas_mkl_info:
    include_dirs = ['/home/ubuntu/miniconda3/envs/LDFMap/include']
    define_macros = [('SCIPY_MKL_H', None)]
    libraries = ['mkl_intel_lp64', 'mkl_intel_thread', 'mkl_core', 'iomp5', 'pthread']
    library_dirs = ['/home/ubuntu/miniconda3/envs/LDFMap/lib']
lapack_mkl_info:
    include_dirs = ['/home/ubuntu/miniconda3/envs/LDFMap/include']
    define_macros = [('SCIPY_MKL_H', None)]
    libraries = ['mkl_lapack95_lp64', 'mkl_intel_lp64', 'mkl_intel_thread', 'mkl_core', 'iomp5', 'pthread']
    library_dirs = ['/home/ubuntu/miniconda3/envs/LDFMap/lib']
blas_opt_info:
    include_dirs = ['/home/ubuntu/miniconda3/envs/LDFMap/include']
    define_macros = [('SCIPY_MKL_H', None)]
    libraries = ['mkl_intel_lp64', 'mkl_intel_thread', 'mkl_core', 'iomp5', 'pthread']
    library_dirs = ['/home/ubuntu/miniconda3/envs/LDFMap/lib']
openblas_lapack_info:
  NOT AVAILABLE
lapack_opt_info:
    include_dirs = ['/home/ubuntu/miniconda3/envs/LDFMap/include']
    define_macros = [('SCIPY_MKL_H', None)]
    libraries = ['mkl_lapack95_lp64', 'mkl_intel_lp64', 'mkl_intel_thread', 'mkl_core', 'iomp5', 'pthread']
    library_dirs = ['/home/ubuntu/miniconda3/envs/LDFMap/lib']
这是我的
setup.py
文件

from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
from Cython.Build import cythonize
import numpy as np
import os

setup(
    author = "Rohan Pandit",
    url='https://www.github.com/rohanp/LDFMap',
    ext_modules = cythonize([Extension("LDFMap",
                            sources = ["LDFMap.pyx"],
                            include_dirs = [np.get_include(), "/home/ubuntu/LDFMap/src/include", "/home/ubuntu/miniconda3/envs/LDFMap/include"],
                            language="c++",
                            libraries = ['mkl_lapack95_lp64', 'mkl_intel_lp64', 'mkl_intel_thread', 'mkl_core', 'iomp5', 'pthread'],
                            library_dirs = ["/home/ubuntu/LDFMap/src/include", '/home/ubuntu/miniconda3/envs/LDFMap/lib'],
                            extra_compile_args = ["-I /home/ubuntu/LDFMap/src/include", "-I /usr/local/include"],
                                        )])

        )
下面是我的错误消息: (为了可读性,我添加了换行符)


我不明白的是,如果此链接适用于NumPy,为什么它不适用于我的程序?

明确指定用于安装的包含路径和BLAS/LAPACK库将导致一个非常依赖平台且难以维护的模块


相反,您应该做的是使用scipy获取指向所需LAPACK函数的指针,如本文所述(请特别参阅第一个链接中的)。这样,如果Scipy安装了MKL,您的Cython程序也会自动使用MKL BLAS/LAPACK。

我从SyPy.LalAlq.Cython LaCack-C导入DGESVD 尝试了<代码>,(DGESVD是我使用的C++头文件所需要的),但我仍然有一个错误:<代码>符号未找到:(我试过…
cimport-dgesvd-as(u-dgesvd)
和…
cimport-dgesvd-as-dgesvd(u)
)@rohanp只适用于
=scipy-0.16
,对于早期版本的scipy,您需要执行整个
f2py_指针(scipy.linalg.blas.dgemm.\u cpointer)
等操作(例如对于dgemm)正如我在C++中所解释的那样,错误是在编译时,而不是在运行时发生的。这可能与我在使用C++代码>使用代码> CDEF ExtReNe>代码>的外部C++函数中调用DGESVD有关吗?你知道如何在AcANDA中用C++代码链接MKL库吗?
g++ -pthread -shared -L/home/ubuntu/miniconda3/envs/LDFMap/lib -Wl,  
-rpath=/home/ubuntu/miniconda3/envs/LDFMap/lib,--no-as-needed 
build/temp.linux-x86_64-3.4/LDFMap.o -L/home/ubuntu/LDFMap/src/include
-L/home/ubuntu/miniconda3/envs/LDFMap/lib -
L/home/ubuntu/miniconda3/envs/LDFMap/lib -lmkl_lapack95_lp64 - 
lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -liomp5 -lpthread - 
lpython3.4m -o /home/ubuntu/LDFMap/src/LDFMap.cpython-34m.so 

/usr/bin/ld: cannot find -lmkl_lapack95_lp64