2010-10-11 20 views
7

estoy teniendo problemas tratando de compilar un programa FORTRAN simple que utiliza un módulo en el mismo directorio. Tengo 2 archivos: test1.f90 que contiene el programa y modtest.f90 que contiene el módulo.Fortran 90 compilar tema: referencia indefinida a <modulename>

Esta es test1.f90:

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

Ésta es modtest.f90:

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

Ambos archivos están en el mismo directorio. Compilo modtest.f90 y test.f90 así:

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

Pero entonces me sale este error:

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

¿Hay algo que me falta? Gracias por la ayuda

+3

preguntas de programación ... Así que esto es lo que es para. Pregunta si no sabes –

+0

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

Respuesta

8

Lo que está haciendo no es decirle al vinculador donde está el módulo de referencia modtest para que su código pueda usar su contenido.

Esto debería funcionar:

gfortran -o test1 test1.f90 modtest.o 

un poco de contexto:

la opción -o indica al compilador para poner la salida de la construcción completa (+ compilar enlace) en un programa llamado test1. Luego proporcionamos un archivo que debemos compilar (t est1.f90). Por último le estamos diciendo al compilador que considerar un archivo que contiene la salida de otro compilado de construcción (modtest.o) y vincular esto a la salida compilada de test1.f90, y el uso de los contenidos de modtest.o cuando se trata de resolver referencias dentro del test1.f90 que referencia el módulo modtest (en la declaración use modtest en el código fuente).

Así que la declaración dice:

Por favor, compilar y enlazar posteriormente test1.f90 a modtest.o, y producir un archivo llamado test1 como la salida final.

+1

Ciertamente trabajar! =) – Wildcat

+3

Sí, ¡gracias! He estado aprendiendo Fortran durante un mes, no puedo creer que no lo sabía: P – Eddy

+1

Si bien este comando resuelve el problema, se debe proporcionar alguna descripción. Estaré encantado de retractar mi voto negativo una vez que la respuesta sea mejorada. –

Cuestiones relacionadas