Python — Связывание Anaconda MKL с программой C ++ / Cython

Я пытаюсь скомпилировать программу на 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"],
)])

)

и вот мое сообщение об ошибке:
(Я добавил разрывы строк для удобства чтения)

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

Чего я не понимаю, так это если эта ссылка работает для NumPy, почему она не работает для моей программы?

1

Решение

Явное указание библиотек include path и BLAS / LAPACK для вашей установки приведет к очень зависимому от платформы и сложному в обслуживании модулю.

Вместо этого вам следует использовать scipy, чтобы получить указатель на нужные вам функции LAPACK, как описано в этом разделе. сообщение (см., в частности, суть в первой ссылке). Таким образом, если Scipy был установлен вместе с MKL, ваша программа Cython также автоматически использует MKL BLAS / LAPACK.

2

Другие решения


По вопросам рекламы [email protected]