“não pode encontrar -lmpi *” ao compilar código openmpi

0

Eu tinha tentado instalar o openmpi 1.8.1 a partir do código-fonte no servidor UnBuntu 14.04. Eu gostaria de usar o mpi para cálculo em larga escala em uma única máquina com vários núcleos.

O teste simples "Hello world" pode ser executado sem qualquer problema.

No entanto, quando tento compilar o programa que preciso usar. Eu recebi o seguinte erro:

/usr/bin/ld: cannot find -lmpi_usempi 
/usr/bin/ld: cannot find -lmpi_mpifh 
/usr/bin/ld: cannot find -lmpi
collect2: error: ld returned 1 exit status
make: *** [mcp2_mpi] Error 1

Eu tentei configurar o LD_LIBRAY_PATH para o diretório onde o openmpi lib pode ser encontrado. Parece que não funciona. Eu tinha tentado verificar o comando ld no modo detalhado.

$ ld -lmpi_usempi --verbose
attempt to open /usr/x86_64-linux-gnu/lib64/libmpi_usempi.so failed
attempt to open /usr/x86_64-linux-gnu/lib64/libmpi_usempi.a failed
attempt to open //usr/local/lib/x86_64-linux-gnu/libmpi_usempi.so failed
attempt to open //usr/local/lib/x86_64-linux-gnu/libmpi_usempi.a failed
attempt to open //usr/local/lib64/libmpi_usempi.so failed
attempt to open //usr/local/lib64/libmpi_usempi.a failed
attempt to open //lib/x86_64-linux-gnu/libmpi_usempi.so failed
attempt to open //lib/x86_64-linux-gnu/libmpi_usempi.a failed
attempt to open //lib64/libmpi_usempi.so failed
attempt to open //lib64/libmpi_usempi.a failed
attempt to open //usr/lib/x86_64-linux-gnu/libmpi_usempi.so failed
attempt to open //usr/lib/x86_64-linux-gnu/libmpi_usempi.a failed
attempt to open //usr/lib64/libmpi_usempi.so failed
attempt to open //usr/lib64/libmpi_usempi.a failed
attempt to open //usr/local/lib/libmpi_usempi.so failed
attempt to open //usr/local/lib/libmpi_usempi.a failed
attempt to open //lib/libmpi_usempi.so failed
attempt to open //lib/libmpi_usempi.a failed
attempt to open //usr/lib/libmpi_usempi.so failed
attempt to open //usr/lib/libmpi_usempi.a failed
ld: cannot find -lmpi_usempi

Parece que o ld não procura as bibliotecas no LD_LIBRARY_PATH. Eu tinha tentado criar um arquivo em /etc/ld.so.conf.d/ para incluir o caminho do openmpi lib. Então o comando sudo ldconfig -v . Eu encontro a seguinte saída:

    /usr/local/openmpi/lib:
    libopen-rte.so.7 -> libopen-rte.so.7.0.3
    libmpi_mpifh.so.2 -> libmpi_mpifh.so.2.3.0
    libopen-trace-format.so.1 -> libopen-trace-format.so.1.0.0
    libmpi_cxx.so.1 -> libmpi_cxx.so.1.1.3
    liboshmem.so.1 -> liboshmem.so.1.0.0
    libvt-mpi.so.0 -> libvt-mpi.so.0.0.0
    libvt-hyb.so.0 -> libvt-hyb.so.0.0.0
    libvt-mt.so.0 -> libvt-mt.so.0.0.0
    libotfaux.so.0 -> libotfaux.so.0.0.0
    libvt-mpi-unify.so.0 -> libvt-mpi-unify.so.0.0.0
    libopen-pal.so.6 -> libopen-pal.so.6.1.1
    libmpi_usempi.so.1 -> libmpi_usempi.so.1.3.0
    libmpi.so.1 -> libmpi.so.1.5.0
    libvt.so.0 -> libvt.so.0.0.0
    libmca_common_sm.so.4 -> libmca_common_sm.so.4.0.3
    libompitrace.so.0 -> libompitrace.so.0.0.0

Parece que os Libs estão incluídos no caminho de pesquisa ld.

No entanto, ainda tenho o mesmo problema de antes.

/usr/bin/ld: cannot find -lmpi_usempi
/usr/bin/ld: cannot find -lmpi_mpifh
/usr/bin/ld: cannot find -lmpi
collect2: error: ld returned 1 exit status
make: *** [mcp2_mpi] Error 1

Existe alguma sugestão para esta questão? Muito obrigado.

    
por Thomas Ding 22.10.2014 / 06:03

2 respostas

1

As etapas que você tentou afetam o caminho de pesquisa da biblioteca tempo de execução . Assumindo que você está usando gcc , para definir o caminho de busca tempo de compilação você precisa usar o -L flag do compilador

   -Ldir
       Add directory dir to the list of directories to be searched for -l.

Então, por exemplo, se você instalou as bibliotecas em / usr / local / openmpi / lib, modifique sua linha de comando gcc para

-L /usr/local/openmpi/lib -lmpi_usempi -lmpi_mpifh -lmpi
    
por steeldriver 22.10.2014 / 09:06
1

Resolvido: "não é possível encontrar -lmpi *" ao compilar o código openmpi

Soluções: Eu tento verificar as outras opções na minha linha de comando de compilação. Eu adiciono um extra-estático na linha de comando de compilação. Ao remover isso, finalmente funciona para mim.

    
por Wilf 02.06.2015 / 13:05