2010-10-11 6 views
7

Ich habe Probleme beim Versuch, ein einfaches Fortran-Programm zu kompilieren, die ein Modul im selben Verzeichnis verwendet. Ich habe 2 Dateien: test1.f90 enthält das Programm und modtest.f90, das das Modul enthält.Fortran 90 kompilieren Problem: undefined Verweis auf <modulename>

Dies ist test1.f90:

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

Dies ist modtest.f90:

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

Beide Dateien im selben Verzeichnis befinden. Ich kompilieren modtest.f90 und test.f90 wie folgt aus:

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

Aber dann bekomme ich diesen Fehler:

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

Gibt es etwas, was ich vermisst habe? Danke für die Hilfe

+3

Programmierung Fragen ... das ist, was ist so für. Frag, ob du es nicht weißt. –

+0

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

Antwort

8

Was Sie tun, ist nicht den Linker zu sagen, wo Referenzmodul modtest ist, damit der Code seinen Inhalt verwenden kann.

sollte diese Arbeit:

gfortran -o test1 test1.f90 modtest.o 

Einige Kontext: genannt test1

die -o Option teilt dem Compiler die Ausgabe des vollständigen Build setzen in ein Programm (+ Link kompilieren). Dann liefern wir eine Datei, die wir kompilieren sollen (t est1.f90). Schließlich weisen wir den Compiler an, eine Datei zu betrachten, die die kompilierte Ausgabe eines anderen Builds enthält (modtest.o) und diese mit der kompilierten Ausgabe von test1.f90 zu verknüpfen und den Inhalt von modtest.o zu verwenden, wenn versucht wird, Referenzen innerhalb der test1.f90 zu sortieren Referenzieren Sie das Modul modtest (in der Anweisung use modtest im Quellcode).

So die Aussage sagt:

Bitte kompilieren und verknüpfen anschließend test1.f90 zu modtest.o und erzeugt eine Datei test1 als die endgültige Ausgabe genannt.

+1

Sicher arbeiten! =) – Wildcat

+3

Ja es tut, danke! Ich lerne seit einem Monat Fortran, ich kann nicht glauben, dass ich das nicht wusste: P – Eddy

+1

Während dieser Befehl das Problem löst, sollte eine Beschreibung angegeben werden. Ich werde glücklich sein, meinen downvote zurückzuziehen, sobald die Antwort verbessert wird. –