在用Visual Studio 2019和windows 10编译MKL库时,未发现模块错误。

问题描述 投票:2回答:1

我面临着一个奇怪的行为的Visual Studio 2019(v 16.5.4),而生产一个python模块链接对英特尔MKL库(2020更新1)。任何帮助将被感激!

要重现它:使用VS2019创建一个小的python模块 "Project1.pyd",其行文如下。

#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库中。

python c++ visual-studio intel-mkl
1个回答
2
投票

使用 stijn 和 Evg 的建议解决了问题。

1) 使用Dependency(github.comlucasgDependencies)对问题进行了描述:没有找到MKL库--似乎MKL运行时库的目录从19版改成了20版。

2) 要解决这个问题,只需在全局变量PATH中添加MKL运行时库(这里是mkl_core和mkl_intel_thread)。

© www.soinside.com 2019 - 2024. All rights reserved.