2012-12-25 4 views
8

Hier ist ein einfaches MPI "Hallo, Welt!" Programm.Öffnen Sie MPI "Hallo, Welt!" kompiliert nicht

#include <stdio.h> 
#include <mpi.h> 

int main(int argc, char **argv) 
{ 
    int size, rank; 
    MPI_Init(&argc, &argv); 
    MPI_Comm_size(MPI_COMM_WORLD, &size); 
    MPI_Comm_rank(MPI_COMM_WORLD, &rank); 
    printf("SIZE = %d RANK = %d\n",size,rank); 
    MPI_Finalize(); 
    return(0); 
} 

Allerdings ist es nicht zu kompilieren scheinen:

Undefined      first referenced 
symbol        in file 
MPI::Datatype::Free()    /var/tmp//ccE6aG2w.o 
MPI::Win::Free()     /var/tmp//ccE6aG2w.o 
MPI::Comm::Comm()     /var/tmp//ccE6aG2w.o 
ld: fatal: symbol referencing errors. No output written to main 
collect2: ld returned 1 exit status 

Ich habe viel gegoogelt, betrachtet Mailinglisten, Tausende von ihnen. Sie sagen, dass libmpi_cxx nicht verbindet. Aber es ist in den Compiler-Flags.

Hier --showme Daten:

mpic++ --showme:compile 
-I/usr/openmpi/ompi-1.5/include -I/usr/openmpi/ompi-1.5/include/openmpi 

mpic++ --showme:link 
-R/opt/mx/lib -R/usr/openmpi/ompi-1.5/lib -L/usr/openmpi/ompi-1.5/lib -lmpi -lopen-rte -lopen-pal -lnsl -lrt -lm -ldl -lsocket -lmpi_cxx 

Mein Compiler g ++.

+1

verknüpfen Sie richtig die (richtige) Bibliothek? –

+0

@MarkGarcia was meinst du nach richtiger Verlinkung? – efpies

+2

Können Sie uns die vollständige (n) Befehlszeile (n) zeigen, die Sie zum Kompilieren und Verknüpfen dieses Codes verwenden? Wie geschrieben, sollte Ihr Code in der Lage sein, mit 'mpicc' zu kompilieren und zu verlinken, da er keinen Bezug zu den C++ - Bindings herstellt. – Novelocrat

Antwort

8

einfach die mpi.h Header platzieren Datei über alle Header-Dateien manchmal das Problem

Ich bin nicht sicher zu kompilieren verursacht, wie u Ihren Code auszuführen. Kompilieren

mpic++ your_code_file.c 

Execution

mpirun -np <no. of Processors> ./a.out 
+0

Nein, ich habe es zuerst versucht. – efpies

1

Es ist auch ein viel einleuchtender und flexibler openmpi und mpi Programme in einer "Eclipse Parallel Application Developers" IDE zu kompilieren.

http://www.eclipse.org/downloads/packages/eclipse-parallel-application-developers/junosr1

+0

Der Punkt war die Verwendung von OpenMPI auf dem Remote-Server ohne "Sudo" -Rechte. Aber vielen Dank für einen Link, vielleicht könnte ich diese IDE auf meinem Mac Mini wegen Problemen mit MacPorts verwenden. – efpies

1

Ein paar Anmerkungen:

  1. Beachten Sie, dass Öffnen MPI 1.5 alte ist. Bitte aktualisieren Sie auf die neueste Version in der Open MPI 1.6.x-Serie (derzeit 1.6.3), beachten Sie jedoch, dass die www.open-mpi.org-Website derzeit einer geplanten Jahresendpflege unterzogen wird und nicht mehr zurück sein wird bis heute, Donnerstag, 28. Dezember 2012).

  2. Ich bin neugierig: Warum kompilieren Sie ein C-Programm mit MPIC++? Sie brauchen nur mpicc - den C MPI Wrapper Compiler. Das würde Ihr Problem definitiv vermeiden. Wenn Sie jedoch dieses kleine C Hello-Weltprogramm als ein einfaches Beispiel verwenden und Ihr eigentliches Ziel darin besteht, ein C++ - MPI-Programm zu kompilieren, dann ist mpiC++ der richtige Wrapper (sogar mit einem einfachen C-Programm). Wenn das der Fall ist, dann haben Sie eine Art Inkompatibilität/Fehlkonfiguration zwischen Ihrem C++ - Compiler und dem C++ - Compiler, mit dem Open MPI kompiliert/installiert wurde.

  3. Wenn Sie auf Ihre Ausgabe von mpiC++ --showme schauen, sieht es so aus, als hätten Sie eine Art Paketverteilung von Open MPI - R wird z. B. nicht standardmäßig in die Flags eingefügt. Woher hast du diese Open MPI-Installation? Es ist durchaus möglich, dass es mit Ihrer g ++ - Installation nicht (vollständig) kompatibel ist (z. B. wenn es mit einer anderen Version von g ++ kompiliert wurde).

  4. aber sagen, dass Ihr mpiC++ --showme Ausgang ist auch seltsam, dass es -lmpi_cxx listet am Ende der Linie. Es sollte die links von -Impi sein, nicht die rechts davon. Ich zeige nicht, wie deine Installation so borked wurde, aber das ist eine andere mögliche Ursache.

So zusammenzufassen, meine Antwort lautet:

  1. Bitte versuchen Sie es öffnen MPI aktualisieren und sehen, ob das Problem verschwindet.
  2. Überprüfen Sie, dass Ihre Installation von Open MPI mit dem System kompatibel ist.
+0

Ich hatte dieses Problem vor langer Zeit und es war nicht der Fall, aber ich möchte auf (3) antworten. 'Woher hast du diese Open MPI-Installation?' Ich benutze Mac OS X und versuche, die manuelle Konfiguration und Installation von Software zu vermeiden. Also habe ich MacPorts verwendet, um die OpenMPI-Bibliothek (sowie gcc/g ++) zu installieren. Es scheint, dass es Probleme verursachen kann, also ist es vielleicht eine gute Entscheidung, OpenMPI manuell zu installieren (zumindest für Ende 2012). Vielleicht hilft es jemandem. – efpies