Fortran 90 compilation question: undefined reference to <modulename>
Je vais avoir du mal à 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.
C'est test1.f90:
program test
use modtest
implicit none
print*,a
end program test
C'est modtest.f90:
module modtest
implicit none
save
integer :: a = 1
end module modtest
Les deux fichiers sont dans le même répertoire. Je compile modtest.f90 et de test.f90 comme ceci:
gfortran -c modtest.f90
gfortran -o test1 test1.f90
Mais ensuite, j'obtiens cette erreur:
/tmp/cckqu8c3.o: In function `MAIN__':
test1.f90:(.text+0x50): undefined reference to `__modtest_MOD_a'
collect2: ld returned 1 exit status
Est-il quelque chose que je suis absent?
Merci pour l'aide
Ou:
Je ne comprends pas ce que vous dites. (Ce que sur les questions de programmation? Par "Donc", voulez-vous dire "StackOverflow" — si si, il faut "DONC". Demandez que faire si vous ne savez pas comment?)
Le commentaire que j'ai répondu à semble avoir été supprimé. Je crois que cette personne a été de se demander pourquoi bâtiment était une question de programmation.De toute façon, c'près d'une décennie:-)
gfortran modtest.f90 test1.f90 -o test1
Je ne comprends pas ce que vous dites. (Ce que sur les questions de programmation? Par "Donc", voulez-vous dire "StackOverflow" — si si, il faut "DONC". Demandez que faire si vous ne savez pas comment?)
Le commentaire que j'ai répondu à semble avoir été supprimé. Je crois que cette personne a été de se demander pourquoi bâtiment était une question de programmation.De toute façon, c'près d'une décennie:-)
OriginalL'auteur Eddy | 2010-10-11
Vous devez vous connecter pour publier un commentaire.
Ce que vous faites n'est pas de raconter l'éditeur de liens où de référence module
modtest
est ainsi que votre code peut utiliser son contenu.Cela devrait fonctionner:
Contexte:
La
-o
option indique au compilateur de mettre la sortie de la version complète (compilation + lien) dans un programme appelétest1
. Puis nous fournir un fichier que nous sommes pour la compilation (test1.f90
). Enfin nous dire au compilateur d'envisager un fichier qui contient la compilation sortie d'une autre génération (modtest.o
) et de le relier à la sortie compilée detest1.f90
, et utiliser le contenu demodtest.o
en essayant de trier les références dans le test1.f90 qui référence le modulemodtest
(dans l'étatuse modtest
dans le code source).De sorte que la déclaration dit:
Veuillez compiler et ensuite lier
test1.f90
àmodtest.o
, et de produire un fichier appelétest1
que la sortie finale.Oui, c'est fait, merci! J'ai été en apprentissage Fortran depuis un mois maintenant, je ne peux pas croire que je ne le savais pas 😛
Bien que cette commande ne permet de résoudre le problème, certains doivent être décrites. Je serai heureux de se rétracter mon downvote une fois que la réponse est améliorée.
La solution n'est pas assez - veuillez fournir un contexte à pourquoi cela résout le problème.
J'ai utilisé cela comme une base pour la compilation d'un projet de beaucoup plus grande, mais je suis arriver le même problème. Sera-ce de travailler pour les programmes à l'aide de modules qui utilisent d'autres modules? S'il vous plaît consulter stackoverflow.com/questions/44870715/...
OriginalL'auteur Preet Sangha