PDA

View Full Version : [C] Problema compilazione programma MPI sotto windows...


MonsterMash
20-05-2008, 23:39
Salve,
devo compilare un programmino che faccia uso delle librerie mpi, ma mi da' sempre questa serie di errori:

./cciKcaaa.o(.text+0x5f):main_MPI.c: undefined reference to `MPI_Init'
./cciKcaaa.o(.text+0x72):main_MPI.c: undefined reference to `MPI_Comm_rank'
./cciKcaaa.o(.text+0x85):main_MPI.c: undefined reference to `MPI_Comm_size'
./cciKcaaa.o(.text+0x337):main_MPI.c: undefined reference to `MPI_Bcast'
./cciKcaaa.o(.text+0x558):main_MPI.c: undefined reference to `MPI_Allreduce'
./cciKcaaa.o(.text+0x75f):main_MPI.c: undefined reference to `MPI_Finalize'
./cciKcaaa.o(.text+0xae7):main_MPI.c: undefined reference to `MPI_Init'
./cciKcaaa.o(.text+0xafd):main_MPI.c: undefined reference to `MPI_Comm_rank'
./cciKcaaa.o(.text+0xb13):main_MPI.c: undefined reference to `MPI_Comm_size'
./cciKcaaa.o(.text+0xc8d):main_MPI.c: undefined reference to `MPI_Allreduce'
./cciKcaaa.o(.text+0xcdd):main_MPI.c: undefined reference to `MPI_Allreduce'


Ho anche provato a copiare dentro la stessa directory del gcc.exe tutti i file include e lib, ma ancora non funziona. Dove sbaglio?

Ho provato sia con le librerie scaricate da questo sito:
http://www.mcs.anl.gov/research/projects/mpich2/
Che con quelle scaricate da questo:
http://www-unix.mcs.anl.gov/mpi/mpich1/mpich-nt/

Il compilatore che uso è il dev-c++, o meglio, il dev-c++ è la IDE installata, ma il compilatore lo lancio da riga di comando, ed è il gcc.exe

Grazie a tutti.

Ciao

P.S. Dimenticavo di dire che uso windows vista 64 come OS.

alfgt
21-05-2008, 00:36
ciao, uso mpi su linux ma il problema è comune alle due piattaforme. Devi passare al compilatore - L path_dei_DLL_mpi e -I path_degli_header_mpi

In sostanza è un problema di dipendenze non soddisfatte in compilazione.

MonsterMash
21-05-2008, 01:39
ciao, uso mpi su linux ma il problema è comune alle due piattaforme. Devi passare al compilatore - L path_dei_DLL_mpi e -I path_degli_header_mpi

In sostanza è un problema di dipendenze non soddisfatte in compilazione.

Ho provato, e purtroppo pare non funzionare neanche così...

MonsterMash
21-05-2008, 14:48
Up.
Nessun altro suggerimento? Ad esempio, una procedura dettagliata a partire dal compilatore e dalla versione di MPI da scaricare, fino ad arrivare alle cartelle include e lib da aggiungere, che mi assicuro il funzionamento sotto windows.

Grazie ancora, ciao

DanieleC88
21-05-2008, 20:54
Oltre a dirgli dove cercare header e librerie, devi anche dirgli con cosa fare il collegamento (linking).

Dai un gcc codice.c -o programma.exe -l<nomelibreria> -I<posizioneheader> -L<posizionelibrerie>.

MonsterMash
21-05-2008, 23:49
Oltre a dirgli dove cercare header e librerie, devi anche dirgli con cosa fare il collegamento (linking).

Dai un gcc codice.c -o programma.exe -l<nomelibreria> -I<posizioneheader> -L<posizionelibrerie>.

Ma dopo i parametri -L e -I il percorso delle cartelle contenenti librerie e header non devono essere separati da uno spazio? Inoltre non capisco cosa intenda per nomlibreria. A quale nome ti riferisci?

MonsterMash
21-05-2008, 23:51
Ho trovato uno script, mpicc.bat, che a quanto ho capito deve essere usato per compilare i software che fanno uso delle librerie mpi. Ma non ho capito come si usa. Qualcuno ne ha idea?

DanieleC88
22-05-2008, 00:03
Ma dopo i parametri -L e -I il percorso delle cartelle contenenti librerie e header non devono essere separati da uno spazio? Inoltre non capisco cosa intenda per nomlibreria. A quale nome ti riferisci?
No, non necessariamente, lo spazio non serve. Comunque se tu hai una libreria che ad esempio è SDL.dll, darai un -lSDL.

MonsterMash
22-05-2008, 00:12
Ho cancellato tutto, compilatore e librerie, e ho riprovato a rifare tutto da capo, e ora mi da' un errore diverso... simile ma diverso.
Ecco quello che ottengo:

C:\Dev-Cpp\bin>gcc.exe prova_mpi.c -o prova_mpi.exe -I ..\include -L ..\lib -I "
F:\Program Files (x86)\Hewlett-Packard\HP-MPI\include" -L "f:\Program Files (x86
)\Hewlett-Packard\HP-MPI\lib"
./ccI7baaa.o(.text+0x48):prova_mpi.c: undefined reference to `_imp__MPI_Init@8'
./ccI7baaa.o(.text+0x59):prova_mpi.c: undefined reference to `_imp__hpmp_comm_wo
rld'
./ccI7baaa.o(.text+0x61):prova_mpi.c: undefined reference to `_imp__MPI_Comm_ran
k@8'
./ccI7baaa.o(.text+0x72):prova_mpi.c: undefined reference to `_imp__hpmp_comm_wo
rld'
./ccI7baaa.o(.text+0x7a):prova_mpi.c: undefined reference to `_imp__MPI_Comm_siz
e@8'
./ccI7baaa.o(.text+0xbf):prova_mpi.c: undefined reference to `_imp__hpmp_comm_wo
rld'
./ccI7baaa.o(.text+0xd6):prova_mpi.c: undefined reference to `_imp__hpmp_char'
./ccI7baaa.o(.text+0xec):prova_mpi.c: undefined reference to `_imp__MPI_Send@24'

./ccI7baaa.o(.text+0x111):prova_mpi.c: undefined reference to `_imp__hpmp_comm_w
orld'
./ccI7baaa.o(.text+0x128):prova_mpi.c: undefined reference to `_imp__hpmp_char'
./ccI7baaa.o(.text+0x142):prova_mpi.c: undefined reference to `_imp__MPI_Recv@28
'
./ccI7baaa.o(.text+0x169):prova_mpi.c: undefined reference to `_imp__MPI_Finaliz
e@0'

MonsterMash
22-05-2008, 00:14
No, non necessariamente, lo spazio non serve. Comunque se tu hai una libreria che ad esempio è SDL.dll, darai un -lSDL.

Capito, ma ci sono una marea di dll nella cartell bin del software di sviluppo per mpi, come faccio a sapere quale è quello giusto?

DanieleC88
22-05-2008, 15:08
E che ne so io, avrà un minimo di documentazione questa libreria? :D
Vedi se c'è scritto a cosa devi fare il linking, ti basterà poi aggiungere quelle librerie alla riga di comando.

Unrue
22-05-2008, 21:11
Salve,
devo compilare un programmino che faccia uso delle librerie mpi, ma mi da' sempre questa serie di errori:



Ho anche provato a copiare dentro la stessa directory del gcc.exe tutti i file include e lib, ma ancora non funziona. Dove sbaglio?

Ho provato sia con le librerie scaricate da questo sito:
http://www.mcs.anl.gov/research/projects/mpich2/
Che con quelle scaricate da questo:
http://www-unix.mcs.anl.gov/mpi/mpich1/mpich-nt/

Il compilatore che uso è il dev-c++, o meglio, il dev-c++ è la IDE installata, ma il compilatore lo lancio da riga di comando, ed è il gcc.exe

Grazie a tutti.

Ciao

P.S. Dimenticavo di dire che uso windows vista 64 come OS.

Non è che hai dimenticato di includere mpi.h ?

MonsterMash
27-05-2008, 18:18
Non è che hai dimenticato di includere mpi.h ?

Non sono pollo fino a questo punto :D.

E poi se non lo avessi fatto gli errori sarebbero stati molto diversi.

Unrue
28-05-2008, 20:30
Non sono pollo fino a questo punto :D.

E poi se non lo avessi fatto gli errori sarebbero stati molto diversi.

Può capitare.. E gli errori erano compatibili ;)

MonsterMash
28-05-2008, 21:32
Io non sono ancora riuscito a risolvere il problema (anche se ammetto che negli ultimi 4 giorni non ci ho più lavorato).
Qualcuno potrebbe provare a compilare questo banalissimo esempio mpi sotto windows e dirmi se a lui funziona?

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

int main(int argc, char** argv)
{
int my_rank;
int p;
int source;
int dest;
int tag = 50;
char message[100];
MPI_Status status;

MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
MPI_Comm_size(MPI_COMM_WORLD, &p);

if(my_rank != 0)
{
sprintf(message, "Greetings from process %d!!\n", my_rank);
dest = 0;
MPI_Send(message, strlen(message) + 1, MPI_CHAR, dest, tag, MPI_COMM_WORLD);
}
else
{
for (source = 1; source < p; source++)
{
MPI_Recv(message, 100, MPI_CHAR, source, tag, MPI_COMM_WORLD, &status);
printf("%s\n\n", message);
}
}
MPI_Finalize();
}



Grazie, ciao