我已经成功在64位Ubuntu 14.04中使用GCC 4.9从零开始成功构建了Open MPI版本2.1.3。结果是以下共享库(使用Open MPI的程序所需):
dummy@machine:~/$ ldd /home/dummy/openmpi/build/lib/libmpi.so /home/dummy/openmpi/build/lib/libopen-rte.so /home/dummy/openmpi/build/lib/libopen-pal.so
/home/dummy/openmpi/build/lib/libmpi.so:
linux-vdso.so.1 => (0x00007ffecfb87000)
libopen-rte.so.20 => not found
libopen-pal.so.20 => not found
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fcc99058000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fcc98d51000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fcc98b33000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fcc9876a000)
/lib64/ld-linux-x86-64.so.2 (0x00005574ed2b8000)
/home/dummy/openmpi/build/lib/libopen-rte.so:
linux-vdso.so.1 => (0x00007ffc99743000)
libopen-pal.so.20 => not found
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007ff6f498f000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ff6f45c6000)
/lib64/ld-linux-x86-64.so.2 (0x00005622db738000)
/home/dummy/openmpi/build/lib/libopen-pal.so:
linux-vdso.so.1 => (0x00007ffdfc374000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f46b6bb5000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f46b69ad000)
libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f46b67aa000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f46b63e0000)
/lib64/ld-linux-x86-64.so.2 (0x000055eca0708000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f46b61c2000)
现在,当我尝试使用Open MPI共享库编译g ++ 4.9版的小程序时,它失败并出现/home/dummy/openmpi/build/lib/libopen-pal.so: undefined reference to pthread_atfork
错误。该小程序如下:
#include <stdio.h>
#include "mpi.h"
int main(void)
{
MPI_Comm comm;
int rank;
MPI_Comm_rank(comm, &rank);
printf("<%d>\n", rank);
return 0;
}
编译语句为:
g++ test.c -pthread -I/home/dummy/openmpi/build/include -L/home/dummy/openmpi/build/lib -lmpi -lopen-rte -lopen-pal
有人知道为什么g ++(即C ++编译器)抛出上述错误吗?仅供参考,当我使用gcc(即C编译器)编译同一程序时,它可以完美运行。