2010-10-11 28 views
7

Je n'arrive pas à essayer de compiler un simple programme fortran qui utilise un module dans le même répertoire. J'ai 2 fichiers: test1.f90 qui contient le programme et modtest.f90 qui contient le module.Fortran 90 problème de compilation: référence non définie à <modulename>

C'est test1.f90:

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

Ceci est modtest.f90:

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

Les deux fichiers se trouvent dans le même répertoire. Je compile modtest.f90 et test.f90 comme ceci:

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

Mais je reçois cette erreur:

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

Y at-il quelque chose que je suis absent? Merci pour l'aide

+3

questions de programmation ... c'est ce que So est pour. Demandez si vous ne savez pas. –

+0

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

Répondre

8

Ce que vous faites ne dit pas au lieur où le module de référence modtest est de sorte que votre code puisse utiliser son contenu.

Cela devrait fonctionner:

gfortran -o test1 test1.f90 modtest.o 

Certains contexte:

l'option -o indique au compilateur de mettre la sortie de la construction complète (compilation + lien) dans un programme appelé test1. Ensuite, nous fournissons un fichier que nous devons compiler (t est1.f90). Enfin nous demandons au compilateur de considérer un fichier qui contient la sortie compilée d'une autre construction (modtest.o) et de lier ceci à la sortie compilée de test1.f90, et d'utiliser le contenu de modtest.o en essayant de trier les références dans le test1.f90 référence le module modtest (dans l'instruction use modtest dans le code source).

Ainsi, la déclaration dit:

S'il vous plaît compiler et lier ensuite test1.f90 à modtest.o, et produire un fichier appelé test1 que la sortie finale.

+1

Certainement travailler! =) – Wildcat

+3

Oui c'est le cas, merci! J'ai appris Fortran pendant un mois maintenant, je ne peux pas croire que je ne savais pas que: P – Eddy

+1

Bien que cette commande résout le problème, une description devrait être fournie. Je serai heureux de rétracter ma downvote une fois la réponse améliorée. –