You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 06:52:29