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.
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.
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.
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
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.