我有一个在 OpenSuse 13.2 上运行的可执行文件。它链接到共享库。一些库随可执行文件一起提供,其他库在系统上检测到。我正在尝试查看是否可以在 Ubuntu 14.04 上运行在 OpenSuse 13.2 上编译的版本。我一直在安装我在可执行文件上使用“ldd”时看到的缺失库(如 gfortran、libblas、liblapack)。它需要 openmpi 包中的一些库。我使用了:sudo apt-get install openmpi-bin libopenmpi-dev
但是可执行文件似乎无法找到这两个库:
libmpi_usempi.so.1
libmpi_mpifh.so.2
在 OpenSuse 上,如果我对这些库使用“ldd”,它们包含:libmpi_mpifh.so.2:
linux-vdso.so.1 (0x00007fff433d9000)
libmpi.so.1 => /usr/lib64/mpi/gcc/openmpi/lib64/libmpi.so.1 (0x00007f7b4ccf3000)
libopen-pal.so.5 => /usr/lib64/mpi/gcc/openmpi/lib64/libopen-pal.so.5 (0x00007f7b4ca32000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f7b4c7ea000)
libc.so.6 => /lib64/libc.so.6 (0x00007f7b4c442000)
libopen-rte.so.5 => /usr/lib64/mpi/gcc/openmpi/lib64/libopen-rte.so.5 (0x00007f7b4c1d2000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f7b4bfce000)
librt.so.1 => /lib64/librt.so.1 (0x00007f7b4bdc6000)
libutil.so.1 => /lib64/libutil.so.1 (0x00007f7b4bbc2000)
/lib64/ld-linux-x86-64.so.2 (0x00007f7b4d212000)
libmpi_usempi.so.1:
linux-vdso.so.1 (0x00007fff9adfc000)
libmpi_mpifh.so.2 => /usr/lib64/mpi/gcc/openmpi/lib64/libmpi_mpifh.so.2 (0x00007f13809a3000)
libmpi.so.1 => /usr/lib64/mpi/gcc/openmpi/lib64/libmpi.so.1 (0x00007f13806d2000)
libopen-pal.so.5 => /usr/lib64/mpi/gcc/openmpi/lib64/libopen-pal.so.5 (0x00007f1380412000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f13801ca000)
libc.so.6 => /lib64/libc.so.6 (0x00007f137fe21000)
libopen-rte.so.5 => /usr/lib64/mpi/gcc/openmpi/lib64/libopen-rte.so.5 (0x00007f137fbb2000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f137f9ae000)
librt.so.1 => /lib64/librt.so.1 (0x00007f137f7a5000)
libutil.so.1 => /lib64/libutil.so.1 (0x00007f137f5a2000)
/lib64/ld-linux-x86-64.so.2 (0x00007f1380e8c000)
我对在系统之间移动软件和链接到可用共享库的概念还不熟悉。如果在 Ubuntu 14.04 上安装 openmpi 包后可执行文件找不到这两个库,我是否应该得出结论,该程序无法从 OpenSuse 移植到 Ubuntu?
答案1
您不能简单地将可执行文件或二进制文件从一个发行版复制到另一个发行版。如果您很幸运,它会成功,但失败大多会失败。
如果您有源代码,您可以在 Ubuntu 上重新编译该软件,这样应该可以让它工作。
还有一些工作要做,以构建可在任何发行版上运行的应用程序容器。我认为对于 MPI 相关的东西奇点在撰写本文时可能是最佳选择。但是您需要在 Suse 13.2 系统上构建应用程序容器。