Have fun with sci.dog

linux解决软件静态库找不到的问题

这段时间,使用前人遗留下来的一个并行软件,复制到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的安装里,都没有提到要设置库函数的环境变量和搜索路径了。

赞(0)
未经允许不得转载:SciDog » linux解决软件静态库找不到的问题

评论 抢沙发