这段时间,使用前人遗留下来的一个并行软件,复制到linux下,提示找不到libmpicxx.so.12。这显然是mpich没有安装的问题。
那么,第一步就是安装mpich了
centos或者redhat可以通过
yum list mpich*
来查看可以安装的mpich版本,我这里安装3.2即可
yum install mpich-3.2
ok。安装mpich后,要把mpich对应的bin添加到环境变量。 我把mpich的lib也添加到了环境变量。
此时,笔者自行编译了一个基于mpi的程序,运行,测试ok。
通过ldd 命令,也能成功找到libmpicxx.so.12这个静态库。
# ldd /opt/lb/LBSimV1
linux-vdso.so.1 => (0x00007ffe177e8000)
libmpicxx.so.12 => /usr/lib64/mpich-3.2/lib/libmpicxx.so.12 (0x00007fdfaca92000)
libmpi.so.12 => /usr/lib64/mpich-3.2/lib/libmpi.so.12 (0x00007fdfac60d000)
libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007fdfacd41000)
libm.so.6 => /lib64/libm.so.6 (0x00007fdfac30b000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fdfac0f5000)
libc.so.6 => /lib64/libc.so.6 (0x00007fdfabd27000)
librt.so.1 => /lib64/librt.so.1 (0x00007fdfabb1f000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fdfab903000)
libgfortran.so.3 => /lib64/libgfortran.so.3 (0x00007fdfab5e1000)
libquadmath.so.0 => /lib64/libquadmath.so.0 (0x00007fdfab3a5000)
/lib64/ld-linux-x86-64.so.2 (0x00007fdfaccb4000)
但奇怪的是,前人留下的程序,依然提示找不到libmpicxx.so.12
./LBSim.0.2: error while loading shared libraries: libmpicxx.so.12: cannot open shared object file: No such file or directory
真是见鬼了
#ldd ./LBSim.0.2
linux-vdso.so.1 (0x00007ffc7af3f000)
libmpicxx.so.12 => not found
libmpi.so.12 => not found
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f07e134d000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f07e1266000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f07e1246000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f07e101c000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f07e1017000)
/lib64/ld-linux-x86-64.so.2 (0x00007f07e157e000)
感觉非常奇怪,后来在网上查看c++的编译、链接,感觉还是前人程序没搜索到这个静态库地址,可以设置gcc的搜索地址:
1、设置LIBRARY_PATH
2、在 /etc/ld.so.conf.d/ 目录下的配置文件指定的动态库绝对路径(通过ldconfig生效,一般是非root用户时使用);
参考链接:(21条消息) Linux gcc中的LIBRARY_PATH 和 LD_LIBRARY_PATH_gcc ld_library_path_小时候挺菜的博客-CSDN博客
采用第二种方法,设置后,程序正确执行。
分析问题是原因,应该是早期的gcc版本不支持搜索$PATH下的库文件导致的。
目前,新版本的mpich的安装里,都没有提到要设置库函数的环境变量和搜索路径了。