Ubuntu 18.04下从源码编译mpi4py失败求助
解决Ubuntu 18.04编译mpi4py时的链接错误问题
问题原因分析
你遇到的链接错误(缺失libm.so.6、libz.so.1及大量未定义引用),本质是mpi4py的编译脚本没拿到完整的OpenMPI链接参数——虽然你找到了libmpi.so,但OpenMPI本身依赖系统基础库,且编译脚本可能没正确调用OpenMPI自带的编译器链,导致链接器找不到这些依赖。
常见触发因素:
- OpenMPI的环境变量未完全配置,导致mpi4py无法获取完整的编译/链接规则
- Python 3.9环境(尤其是非系统自带版本)未关联系统标准库路径
- 系统缺少基础库的开发包,导致链接时找不到库文件
解决办法
1. 用OpenMPI自带的mpicc编译(最可靠)
直接指定使用OpenMPI的mpicc编译器,它已经内置了所有必要的依赖链接参数,无需手动指定:
# 替换为你的OpenMPI安装路径下的mpicc MPICC=/usr/local/openmpi-4.1.4/bin/mpicc python setup.py build
或者更简洁:
python setup.py build --mpi=mpicc
如果之前没配置OpenMPI的PATH,先执行:
export PATH=/usr/local/openmpi-4.1.4/bin:$PATH export LD_LIBRARY_PATH=/usr/local/openmpi-4.1.4/lib:$LD_LIBRARY_PATH
2. 先验证OpenMPI本身是否正常
先排除OpenMPI自身的问题,写个简单的测试程序test.c:
#include <mpi.h> #include <stdio.h> int main(int argc, char** argv) { MPI_Init(NULL, NULL); int rank; MPI_Comm_rank(MPI_COMM_WORLD, &rank); printf("Hello from rank %d\n", rank); MPI_Finalize(); return 0; }
用mpicc编译运行:
mpicc test.c -o test mpirun -np 2 ./test
如果能正常输出,说明OpenMPI没问题,问题出在mpi4py的编译配置上。
3. 补充系统基础开发库
确保Ubuntu系统安装了必要的依赖包:
sudo apt-get update && sudo apt-get install build-essential zlib1g-dev
这些包提供了libm、libz等基础库的开发文件,避免编译时找不到依赖。
4. 手动指定链接器参数
如果上述方法无效,直接在编译时传入系统库路径和依赖:
python setup.py build --mpi=openmpi LDFLAGS="-L/lib/x86_64-linux-gnu -lm -lz"
/lib/x86_64-linux-gnu是Ubuntu 18.04 x86_64架构下系统库的默认路径,根据你的架构调整。
5. 改用pip安装替代源码编译
如果源码编译始终有问题,直接用pip安装,同时指定mpicc:
MPICC=/usr/local/openmpi-4.1.4/bin/mpicc pip install mpi4py
pip会自动处理编译链接的细节,成功率更高。
内容的提问来源于stack exchange,提问作者dairhepon
相关产品推荐
相关产品推荐

