MPICH2 est installé dans C: \ Program Files \ MPICH2. Il existe deux sous-répertoires (d'intérêt), \include
qui contient des fichiers .h et \lib
qui contient des fichiers .lib.L'éditeur de liens MinGW ne trouve pas les bibliothèques MPICH2
Le README qui vient avec MPICH2 a les instructions suivantes:
- créer un makefile
- ajouter
–I...mpich2\include
- ajoutent
–L...mpich2\lib
- ajoutent
–lmpi
- ajouter les règles de vos fichiers source
- compiler
Comme il n'y a pas d'autres règles dans mon projet, je ne crée pas un makefile, je vais juste à la ligne de commande et d'essayer la compilation comme ceci:
g++ -I"C:\Program Files\MPICH2\include" main.cpp -L"C:\Program Files\MPICH2\lib" -lmpi
Cela me donne une poignée de undefined reference
erreurs sur chaque symbole MPI unique dans le code. J'ai passé des heures à essayer de le réparer, jongler -I
, -L
et -l
bascule autour, en mélangeant l'ordre des paramètres, même copié tous les fichiers .lib dans le même répertoire que ma source, mais rien ne semble fonctionner.
Quel type de vaudou est nécessaire pour que cette chose lie?
EDIT: Je pense avoir trouvé le problème: voici un extrait de la sortie de l'éditeur de liens en mode verbose (ajout -Wl,--verbose
à la commande de compilation):
attempt to open C:\Program Files\MPICH2\lib/libmingwex.dll.a failed
attempt to open C:\Program Files\MPICH2\lib/mingwex.dll.a failed
attempt to open C:\Program Files\MPICH2\lib/libmingwex.a failed
attempt to open C:\Program Files\MPICH2\lib/mingwex.lib failed
attempt to open C:\Program Files\MPICH2\lib/libmingwex.dll failed
attempt to open C:\Program Files\MPICH2\lib/mingwex.dll failed
attempt to open C:\Program Files\MPICH2\lib\libmingwex.a failed
Apparemment, l'éditeur de liens ajoute une place /
d'un \
aux noms de répertoire que je lui fournis (sauf lorsque vous recherchez le format lib___.a
pour une raison quelconque), ce qui n'est évidemment pas un chemin valide. Est-il possible de dire à l'éditeur de liens d'utiliser des barres obliques inverses au lieu de barres obliques?
Cela a également attiré mon attention:
attempt to open /mingw/lib/libmingwex.a succeeded
J'ai donc essayé de compiler comme ceci:
g++ -I"/Program Files/MPICH2/include" -L"/Program Files/MPICH2/lib" objManager.cpp ongom.cpp io.cpp main.cpp -lmpi -lcxx
Mais je reçois toujours les mêmes erreurs undefined reference
.
de publier le journal du compilateur/éditeur de liens? –
Il n'y a vraiment pas grand-chose à voir, c'est juste des dizaines de lignes comme ceci: 'C: \ Utilisateurs \ Bansaghi \ AppData \ Local \ Temp/ccIF61Uc.o: main.cpp :(. Text + 0x1615): référence non définie à 'MPI_Comm_rank '' – suszterpatt