VS19环境下Eigen链接OpenBlas时pybind11模块导入失败问题
问题1:OpenBLAS安装是否正确,仅生成单个openblas.lib是否正常
是正常的。如果你编译时选择了静态编译选项,生成的就是单独的静态库文件openblas.lib;如果是动态编译,才会同时生成openblas.lib(导入库)和openblas.dll(动态库)两个文件。你可以返回编译目录查看编译日志确认编译类型,只要没有报错就是安装正确。
问题2:项目与OpenBLAS的链接步骤是否正确
你写的两步配置本身是正确的,出现导入失败是其他环节配置不匹配导致的,常见排查点如下:
- 如果你编译的是动态版本的OpenBLAS,必须把对应的
openblas.dll放到pyd文件同目录,或者添加到系统环境变量PATH中,否则pyd加载时找不到依赖的dll,就会提示模块未定义,这是最常见的原因。 - 确认
#define EIGEN_USE_BLAS的位置:该宏必须放在base.h中所有Eigen头文件引入的最前方,若先引入Eigen头文件再定义宏,宏不会生效,会导致符号不匹配,编译无报错但运行时符号缺失。 - 确认编译架构完全一致:OpenBLAS、你的pybind11项目、当前使用的Python版本三者必须同为x86或同为x64架构,架构不兼容也会导致pyd加载失败。
- 确认运行库编译选项一致:如果你用的是静态版OpenBLAS,需要保证OpenBLAS编译时的运行库选项(/MT/MTd/MD/MDd)和你的pybind11项目完全一致,运行库不匹配会触发加载错误。
- 你可以临时注释掉
#define EIGEN_USE_BLAS宏重新编译,若此时pyd可以正常导入,即可锁定问题出在OpenBLAS的依赖关联环节,按上述步骤排查即可。
内容的提问来源于stack exchange,提问作者lefe
相关产品推荐
相关产品推荐

