“не может найти-lmpi*” при компиляции openmpi кода

У меня была попытка установить openmpi 1.8.1 от исходного кода в сервере Ubuntu 14.04. Я хотел бы использовать mpi для крупномасштабного вычисления на единственной машине со много ядрами.

Простое "Привет мировой" тест может быть выполнено без любой проблемы.

Однако, когда я пытающийся скомпилировать программу, которую я должен использовать. Я получил следующую ошибку:

/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

У меня была попытка установить LD_LIBRAY_PATH на каталог, где openmpi lib может быть находкой. Это кажется, не работает. У меня была попытка проверить команду ld в подробный режим.

$ 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

Кажется, что ld не ищет библиотеки в LD_LIBRARY_PATH. У меня была попытка создать файл в/etc/ld.so.conf.d/для включения пути openmpi lib. Затем команда sudo ldconfig-v. Я нахожу следующий вывод:

    /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

Кажется, что Освобождение включено в ld путь поиска.

Однако я все еще получил ту же проблему как прежде.

/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

Там некоторые предложения к этой проблеме?Большое спасибо.

0
задан 9 September 2019 в 06:29

3 ответа

Шаги Вы попробовали влияние время выполнения путь поиска библиотеки. Предположение, что Вы используете gcc, для установки время компиляции путь поиска, необходимо использовать компилятор -L флаг

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

Так, например, при установке библиотек в/usr/local/openmpi/lib изменяет Ваш gcc командная строка к

-L /usr/local/openmpi/lib -lmpi_usempi -lmpi_mpifh -lmpi
1
ответ дан 6 October 2019 в 12:42

Решенный: "не может найти-lmpi*" при компиляции openmpi кода

Решения: Я пытаюсь проверить другие опции в свою командную строку компиляции. Я добавляю дополнительное - статичный в командной строке компиляции. Путем удаления этого это наконец работает на меня.

1
ответ дан 6 October 2019 в 12:42

Рабочая настройка Ubuntu 20.04

В общем, вы должны передать флаги pkg-config в команду компиляции, чтобы иметь возможность компилировать, например. либо:

sudo apt install libopenmpi-dev
gcc $(pkg-config --cflags mpi) main.c $(pkg-config --libs mpi)

sudo apt install libmpich-dev
gcc $(pkg-config --cflags mpich) main.c $(pkg-config --libs mpich)

в зависимости от того, хотите ли вы openmpi или MPICH: https://stackoverflow.com/questions/2427399/mpich-vs-openmpi

Теоретически оба из них компилируют простой тест, подобный этому:

#include <mpi.h>

int main() {
  MPI_Finalize();
  return 0;
}

Однако в Ubuntu 20.04 работает только MPICH, потому что в пакете libopenmpi-dev есть ошибка и забыли символическую ссылку:

/usr/lib/x86_64-linux-gnu/libmpi.so -> /usr/lib/x86_64-linux-gnu/libmpi.so.40

так что вы можете просто сделать это вручную в качестве обходного пути:

sudo ln -s /usr/lib/x86_64-linux-gnu/libmpi.so.40 \
           /usr/lib/x86_64-linux-gnu/libmpi.so

Отчет об ошибке на : https://bugs.launchpad.net/ubuntu/+source/openmpi/+bug/1869612

Я нашел это, ища libmpi.so с:

locate libmpi.so
dpkg -L libopenmpi-dev

Но это работает, если я просто передам это непосредственно в команду компиляции:

gcc $(pkg-config --cflags mpi) main.c /usr/lib/x86_64-linux-gnu/libmpi.so.40

Теперь я также узнал о существовании пакета /usr/bin/mpicc из пакета openmpi-bin . ] https://stackoverflow.com/questions/20739909/what-is-mpic-file-used-for, но версия libopenmpi-dev в Ubuntu не работает также из-за отсутствия libmpi.so символическая ссылка.

1
ответ дан 9 June 2020 в 14:28

Другие вопросы по тегам:

Похожие вопросы: