Я использую Ubuntu 11.04 64-bit. Я установил OpenMPI. Я пытаюсь построить следующий код, который представляет собой фрагмент тестовой задачи из книги «Использование MPI» Gropp / Lusk / Skjellum:
#include <math.h>
#include "mpi.h"
int main(int argc, char *argv[])
{
int size, rank;
MPI::Init(argc, argv);
size = MPI::COMM_WORLD.Get_size();
rank = MPI::COMM_WORLD.Get_rank();
MPI::Finalize();
return 0;
}
Из терминала я могу использовать оболочку mpicc для получения следующей информации, которая мне нужна для компиляции и компоновки на моей машине:
$ mpicc --showme:compile
-I/usr/lib/openmpi/include -I/usr/lib/openmpi/include/openmpi -pthread
$ mpicc --showme:link
-pthread -L/usr/lib/openmpi/lib -lmpi -lopen-rte -lopen-pal -ldl -Wl,--export-dynamic -lnsl -lutil -lm -ldl
Я могу успешно скомпилировать код. Тем не менее соединение не удается. Вот мои шаги компилятора и компоновщика:
make all
Building file: ../main.cpp
Invoking: GCC C++ Compiler
mpicc -I/usr/lib/openmpi/include -I/usr/lib/openmpi/include/openmpi -O0 -g3 -Wall -c -fmessage-length=0 -pthread -MMD -MP -MF"main.d" -MT"main.d" -o"main.o" "../main.cpp"Finished building: ../main.cpp
Building target: test
Invoking: GCC C++ Linker
mpicc -L/usr/lib/openmpi/lib -pthread -Wl,--export-dynamic -o"test" ./main.o -lm -ldl -lmpi -lopen-rte -lopen-pal -lnsl -lutil
./main.o: In function `main':
/home/djunderw/ncsu/workspace/test/Debug/../main.cpp:20: undefined reference to `MPI::COMM_WORLD'
/home/djunderw/ncsu/workspace/test/Debug/../main.cpp:21: undefined reference to `MPI::COMM_WORLD'
./main.o: In function `__static_initialization_and_destruction_0':
/usr/include/c++/4.4/iostream:72: undefined reference to `std::ios_base::Init::Init()'
/usr/include/c++/4.4/iostream:72: undefined reference to `std::ios_base::Init::~Init()'
.......
я использовал .......
выше, чтобы обозначить тот факт, что сообщения об ошибках повторяются — их довольно много, но я не думаю, что все они необходимы для показа здесь. Если они есть, пожалуйста, спросите, и я вставлю их все.
Я подозреваю, что мои флаги компоновщика расположены не в правильном порядке. Другой поток приходит к такому выводу: Ошибки связи при использовании G ++ для кода MPI. Но если так, я не могу понять, что вышло из строя.
Почему моя ссылка не работает?
РЕШИТЬ: Я изменился mpicc
в mpic++
и теперь это работает.
Является ли ваш файл файлом .c или .cpp? Вопрос в том, что mpicc — это компилятор c, а mpic ++ — это компилятор c ++, поэтому, если у вас программа на c, компиляция ее с помощью компилятора C ++, я думаю, не рекомендуется.