在由g ++编译的C程序中使用Open MPI共享库时出错

时间:2018-06-23 12:40:11

标签: c++ c gcc openmpi

我已经成功在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编译器)编译同一程序时,它可以完美运行。

0 个答案:

没有答案