ubuntu18.04下编译mpi程序出现动态链接库错误

报错:

/usr/bin/ld: /tmp/ccyKBF8m.o: undefined reference to symbol 'pthread_setaffinity_np@@GLIBC_2.3.4' /lib/x86_64-linux-gnu/libpthread.so.0: 无法添加符号: DSO missing from command line collect2: error: ld returned 1 exit status Makefile:12: recipe for target 'graph500_reference_bfs_sssp' failed make: *** [graph500_reference_bfs_sssp] Error 1

1、尝试

最近在搞mpi相关的程序,发现在编译相关程序时,出现上述问题,debug了一下午,也试了各种操作,但都没有解决。

以下为我尝试的方法:

#1、在链接器最后加-lpthread
LDFLAGS= -lpthread
#2、使用locate指令确认动态链接库的位置,使用—L /path/to/缺少的动态链接库的文件
LDFLAGS = -L/path/to/pthread/library -lpthread

但很可惜,都没有解决问题。

2、深究

我要跑的程序需要MPI3.0的标准,我以为是某个库的版本,经过查阅发现,MPI 3.0 是一个标准,而不是单个库的版本。要使用 MPI 3.0 标准的功能,想安装支持 MPI 3.0 标准的 MPI 库,需要从相应的 MPI 实现提供商处获取适当的软件包,并按照其提供的安装说明进行安装。常见的 MPI 实现包括 Open MPI、MPICH 和 Intel MPI。

3、解决

我首先在ubuntu18.04上安装的是mpich-3.4.3,情况可想而知,一直有这个错误,所以,最终通过卸载mpich,安装了openmpi解决了问题,真的栓Q。

#openmpi可以直接使用apt命令进行安装
sudo apt-get install openmpi

4、问题解决过程中遇到的问题

#由于我是通过源码编译安装的mpich,导致无法使用apt remove指令卸载。
#在使用源码编译安装软件的过程中,最好不要删除原有的安装包,在自己想要卸载的时候,可以在源安装包内使用相关命令进行删除和卸载,大多数是支持下面指令的。
sudo make uninstall && make clean

5、记录一下源码编译安装库的过程

大致可以分为以下几个过程吧,以安装mpich的过程为例。

1、下载&&解压

#wget下载源文件
wget https://www.mpich.org/static/downloads/3.4/mpich-3.4.3.tar.gz
#解压
tar -zxvf mpich-3.4.3.tar.gz

2、配置安装路径
如果不指定安装路径:
可执行文件默认放在/usr/local/bin,

库文件默认放在/usr/local/lib,

配置文件默认放在/usr/local/etc,

其他的资源文件放在/usr/local/share,比较分散。

为了便于集中管理某个软件的各种文件,想指定到某个路径下,可以配置 --prefix

./configure --prefix=/usr/local/mpich

3、编译安装

#如果想编译的快些,可以使用make -j4或者make -j8 多核进行编译。
make 
#最后执行安装命令。
make install

4、配置环境变量

通过vim打开当前用户下所对应的.bashrc文件:

sudo vim ~/.bashrc

在最下面一行添加:

export PATH=/usr/local/mpich/bin:$PATH

然后再保存退出后,再更新配置文件使其生效。

source ~/.bashrc

完成搞定。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值