Ошибка модуля не найден при компиляции библиотеки MKL с Visual Studio 2019 и windows 10 - PullRequest
2 голосов
/ 07 мая 2020

Я столкнулся со странным поведением Visual Studio 2019 (v 16.5.4) при создании модуля python, связанного с библиотеками Intel MKL (2020 Update 1). Приветствуется любая помощь!

Чтобы воспроизвести его: создайте небольшой python модуль «Project1.pyd» с помощью VS2019 со следующими строками:

#include <pybind11/pybind11.h>
#include <mkl.h>

void test() {
    const MKL_INT m(10);
    double test[m*m];
    cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, m, m, m, 1., test, m, test, m, 0., test, m);
}

PYBIND11_MODULE(Project1, m) {
    m.def("test", &test);
}

Этот код связан с mkl_rt. lib в качестве дополнительной зависимости библиотеки для определения cblas_dgemm. Затем я вызываю модуль с простой строкой python

if __name__ == "__main__":
import Project1 as p

, ведущей к 'Ошибка загрузки DLL: модуль не найден'

Обратите внимание, что я смог запустить тот же код с помощью VS2019 16.4.5 / Python 3.6.

Ужасно то, что ни компилятор, ни компоновщик ни на что не жалуются: я потратил три полных дня, чтобы выявить и изолировать эту проблему, поскольку она возникла в большой библиотеке C ++ / python.

1 Ответ

2 голосов
/ 07 мая 2020

Проблема решена с использованием предложений stijn и Evg:

1) Проблема была охарактеризована с помощью Dependency (github.com/lucasg/Dependencies): библиотеки MKL не найдены - похоже, библиотеки времени выполнения MKL изменились каталоги с версии 19 по 20.

2) Чтобы решить проблему, просто добавьте в глобальную переменную PATH библиотеки времени выполнения MKL (здесь mkl_core и mkl_intel_thread).

...