为Python、IMP创建C++ MPI模块

2021-04-11 15:15:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Python模块,它封装了一个C++库。该库使用MPI并使用mpicxx编译。在某些机器上一切都很好,但在其他机器上我发现:

ImportError: ./_pyCombBLAS.so: undefined symbol: _ZN3MPI3Win4FreeEv

所以MPI库中有一个未定义的符号。据我所知,mpicxx应该把所有的东西都链接起来,但是它没有。有什么想法吗?在

3条回答
网友
1楼 ·

符号ZN3MPI3Win4FreeEv被定义为libmpi_cxx.so,因此必须用-lmpi_cxx而不是{}链接

网友
2楼 ·

这是一个共享库问题。尝试在扩展模块的工作系统和发生故障的系统上运行ldd。在

ldd _extension.so

这将显示扩展所依赖的所有库,以便确保它们可用。在

解决这个问题的一个简单方法可能是将依赖项静态链接到扩展中。在

网友
3楼 ·

原来,错误是加载了错误的库。 正如您所知,一个集群可能安装了多个版本的MPI,有时同一个版本是用多个编译器编译的。这些文件名可能相同。在我的例子中,即使我使用MPICH GNU编译,默认路径还是指向OpenMPI PGI库。我没有意识到这一点,我以为用MPICH GNU编译意味着在运行时可以找到MPICH GNU库。在

当然,我实际上不能使用PGI编译的OpenMPI,因为Python是用GCC编译的,而PGI并不能发出与GCC完全兼容的二进制文件。在

解决方案是设置LD嫒LIBRARY环境变量,使其与用于编译代码的MPI发行版相匹配。在

相关问题