2010-10-11 26 views
7

Ho difficoltà a provare a compilare un semplice programma fortran che utilizza un modulo nella stessa directory. Ho 2 file: test1.f90 che contiene il programma e modtest.f90 che contiene il modulo.Problema di compilazione di Fortran 90: riferimento non definito a <modulename>

Questo è test1.f90:

program test 
    use modtest 
    implicit none 
    print*,a 
end program test 

Questo è modtest.f90:

module modtest 
    implicit none 
    save 
    integer :: a = 1 
end module modtest 

Entrambi i file sono nella stessa directory. Compilo modtest.f90 e test.f90 come questo:

gfortran -c modtest.f90 
gfortran -o test1 test1.f90 

Ma allora ottengo questo errore:

/tmp/cckqu8c3.o: In function `MAIN__': 
test1.f90:(.text+0x50): undefined reference to `__modtest_MOD_a' 
collect2: ld returned 1 exit status 

C'è qualcosa che mi manca? Grazie per l'aiuto

+3

domande di programmazione ... questo è ciò che è così per. Chiedi se non lo sai. –

+0

Oppure: 'gfortran modtest.f90 test1.f90 -o test1' –

risposta

8

Quello che stai facendo non sta dicendo al linker dove il modulo di riferimento modtest è così che il tuo codice può usarne il contenuto.

Questo dovrebbe funzionare:

gfortran -o test1 test1.f90 modtest.o 

Alcuni contesto:

l'opzione -o dice al compilatore di mettere l'uscita del pieno build (compilazione + link) in un programma chiamato test1. Quindi forniamo un file che dobbiamo compilare (t est1.f90). Infine, stiamo dicendo al compilatore di prendere in considerazione un file che contiene l'output compilato di un'altra build (modtest.o) e di collegarlo all'output compilato di test1.f90 e di utilizzare il contenuto di modtest.o quando si tenta di ordinare i riferimenti all'interno di test1.f90 che fare riferimento al modulo modtest (nella dichiarazione use modtest nel codice sorgente).

Quindi la dichiarazione dice:

Compila e successivamente collegamento test1.f90 a modtest.o, e produrre un file chiamato test1 come l'output finale.

+1

Certamente funziona! =) – Wildcat

+3

Sì, grazie! Sto imparando Fortran da un mese, non posso credere di non saperlo: P – Eddy

+1

Mentre questo comando risolve il problema, dovrebbe essere fornita qualche descrizione. Sarò felice di ritirare il mio downvote una volta migliorata la risposta. –