У меня была попытка установить 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
Там некоторые предложения к этой проблеме?Большое спасибо.
Шаги Вы попробовали влияние время выполнения путь поиска библиотеки. Предположение, что Вы используете 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
Решенный: "не может найти-lmpi*" при компиляции openmpi кода
Решения: Я пытаюсь проверить другие опции в свою командную строку компиляции. Я добавляю дополнительное - статичный в командной строке компиляции. Путем удаления этого это наконец работает на меня.
Рабочая настройка 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
символическая ссылка.