как установить Openmpi для xcode?

Я пытаюсь запустить некоторые программы MPI в xcode 4. Я установил openmpi из MacPort, набрав sudo port install openmpi и установка закончилась нормально. Затем я добавил opt / local / include / openmpi в мои пути поиска по заголовку пользователя и перетащил «libmpi.dylib» и «libmpi_cxx.dylib» в мой проект.

Но затем, когда я попытался запустить программу, я получил следующее сообщение об ошибке:

Undefined symbols for architecture x86_64:
"_MPI_Comm_accept", referenced from:
MPI::Intracomm::Accept(char const*, MPI::Info const&, int) const in main.o
"_MPI_Comm_connect", referenced from:
MPI::Intracomm::Connect(char const*, MPI::Info const&, int) const in main.o
"_MPI_Comm_disconnect", referenced from:
MPI::Comm::Disconnect() in main.o
"_MPI_Comm_get_errhandler", referenced from:
MPI::Comm::Get_errhandler() const in main.o
"_MPI_Comm_set_errhandler", referenced from:
MPI::Comm::Set_errhandler(MPI::Errhandler const&) const in main.o
"_MPI_Comm_spawn", referenced from:
MPI::Intracomm::Spawn(char const*, char const**, int, MPI::Info const&, int) const in main.o
MPI::Intracomm::Spawn(char const*, char const**, int, MPI::Info const&, int, int*) const in main.o
"_MPI_Comm_spawn_multiple", referenced from:
MPI::Intracomm::Spawn_multiple(int, char const**, char const***, int const*, MPI::Info const*, int) in main.o
MPI::Intracomm::Spawn_multiple(int, char const**, char const***, int const*, MPI::Info const*, int, int*) in main.o
"_MPI_Grequest_complete", referenced from:
MPI::Grequest::Complete() in main.o
"_MPI_Op_commutative", referenced from:
MPI::Op::Is_commutative() const in main.o
"_MPI_Reduce_local", referenced from:
MPI::Op::Reduce_local(void const*, void*, int, MPI::Datatype const&) const in main.o
"_MPI_Win_call_errhandler", referenced from:
MPI::Win::Call_errhandler(int) const in main.o
"_MPI_Win_get_errhandler", referenced from:
MPI::Win::Get_errhandler() const in main.o
"_MPI_Win_set_errhandler", referenced from:
MPI::Win::Set_errhandler(MPI::Errhandler const&) const in main.o
"_ompi_mpi_comm_null", referenced from:
MPI::Intracomm::Intracomm(ompi_communicator_t*) in main.o
MPI::Graphcomm::Graphcomm(ompi_communicator_t* const&) in main.o
MPI::Cartcomm::Cartcomm(ompi_communicator_t* const&) in main.o
"_ompi_mpi_comm_world", referenced from:
_main in main.o
"_ompi_mpi_double", referenced from:
_main in main.o
"_ompi_mpi_op_sum", referenced from:
_main in main.o
"_ompi_op_set_cxx_callback", referenced from:
MPI::Op::Init(void (*)(void const*, void*, int, MPI::Datatype const&), bool) in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Я что-то упускаю в описанных выше процессах установки?

3

Решение

У меня была такая же проблема, когда я компилировал openmpi из исходных кодов, добавил пути поиска по заголовкам и библиотекам, но забыл добавить библиотеки в качестве флагов компоновщика в настройки сборки. Добавление их решило это. Вы можете напечатать mpicc –showme чтобы увидеть библиотеки, необходимые для запуска mpi.

5

Другие решения

Сначала обязательно установите MPI.
Я лично пользуюсь заваривать сделать это.

brew update
brew install open-mpi

Затем проверьте требования к c ++:

mpic++ -showme

или же mpicc -showme for c

Мой вывод с mpic ++:

clang++ -I/usr/local/Cellar/open-mpi/1.8.6/include -L/usr/local/opt/libevent/lib -L/usr/local/Cellar/open-mpi/1.8.6/lib -lmpi_cxx -lmpi

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

  1. «/usr/local/Cellar/open-mpi/1.8.6/include» в «Пути поиска — пути поиска заголовка»
  2. «/ usr / local / opt / libevent / lib» и «/usr/local/Cellar/open-mpi/1.8.6/lib» в «Пути поиска — пути поиска в библиотеке»
  3. «-lmpi_cxx -lmpi» в «Связывание — другие флаги линкера»

Это можно сделать через Настройки сборки вариант из проекта Xcode.

Так как МПИ нужно использовать свою собственную программу для бежать наши мы должны изменить исполнимый.

  1. Выбрать «Редактировать схемы» введите описание изображения здесь
  2. В диалоговом окне под Информация для исполнимый выбирать Другой… из выпадающего списка.введите описание изображения здесь
  3. Измените это на Mpiexec который является псевдонимом «orterun». Для меня это в /usr/local/Cellar/open-mpi/1.8.6/bin. Обратите внимание, что обычно это скрытая папка. Вы можете открыть его, нажав cmd + shift + g,
  4. Для бега Mpiexec нужно знать как аргументы количество процессоров и запускаемый файл. Итак, в том же диалоговом окне под аргументы

    • добавлять «-n X» где X — количество процессоров, которые вы хотите использовать «Для этого примера я буду использовать 2».
    • добавлять «$ BUILT_PRODUCTS_DIR / $ EXECUTABLE_PATH» которая является комбинацией переменных среды, которые определяют исполняемый файл.

введите описание изображения здесь

  • Затем добавьте <mpi.h> заголовок к вашему исходному коду.
  • Запустите его, и вы увидите 2 «Привет, мир!» (потому что я использую -п 2 для примера).

источники: FAQ по open-mpi xcode, отладка & запуск программ MPI в Xcode

15

Или просто введите mpic ++ вместо mpicc. Это сработало для меня;)

0
По вопросам рекламы [email protected]