Pregunta

Soy muy nuevo en Fortran y todo el compilador Intel (estoy usando el compilador Intel basado en Windows con la biblioteca IMSL sin integración de Visual Studio, por lo tanto, solo línea de comandos).

El problema debería ser extremadamente simple: tengo un programa Fortran que necesitaba compilar que se almacene como cuatro partes de código fuente diferentes. El programa principal (y algunas subrutinas) se almacenan en el archivo de código llamado Central. para, y también hay tres archivos, llamémoslos S1. para, S2.For y S3. para, cada uno de los cuales contiene solo una subrutina (Leticamos Llámalos SUB1-SUB3) y no hay programa principal. El programa principal llama a las subrutinas almacenadas en S1-S3, así como en Central.

La pregunta es cómo debo compilarlo:

Cuando trato de compilar el Central. Porque, da error LNK2019: unresolved external symbol _SUB1 referenced in function _MAIN__. Del mismo modo, da el mismo mensaje para Sub2 y Sub3.

Cuando trato de compilar S1. para S3. Porque, da error LNK2019: unresolved external symbol _MAIN__ referenced in function _main

Parece obvio que necesito vincularlos de alguna manera. Sin embargo, no tengo idea de cómo

¿Fue útil?

Solución

Debe compilar las piezas del programa sin vincular primero, luego vincularlas todas juntas. Entonces su línea de comando se verá así:

ifort /c s1.for
ifort /c s2.for
ifort /c s3.for
ifort /c central.for

donde el /c es corto para /compile-only; /nolink también funcionaría. Esto generará archivos S1.O, S2.O, S3.O y Central.o, respectivamente. Lo anterior se puede hacer en cualquier orden. Ahora las piezas individuales se unen y harás algo como

ifort /exe:central.exe central.o s1.o s2.o s3.o

para construir el ejecutable.

Tenga en cuenta que esto se complica un paso más si está compilando el código Fortran moderno que usa módulos, y (por ejemplo) el programa principal en Central. Porque tiene una línea como use s2. En ese caso, tu tener compilar (incluso con /c) S2 antes de Central; Cuando compile S2 en ese caso, obtendría un archivo de salida adicional, S2.Mod. Ese archivo S2.mod se necesitaría para compilar Central. para. Pero dadas las extensiones del nombre de archivo, este es probable que sea un código anterior y los módulos probablemente no sean un problema.

Otros consejos

Así es como lo he hecho. Cada una de las funciones de apoyo se compila en un Biblioteca estática. Luego, en el proyecto principal, agregue un elemento existente y seleccione la biblioteca estática .lib Archivo (salida de la compilación). La llamada justa las funciones como si su fuente fuera parte del código principal (con CALL MYLIBFUN())

Buena suerte.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top