Компиляция Fortran 77 с внешней библиотекой с использованием Makefile - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть основная программа Engine.f, которая вызывает функции / внешние в LIB.f.В отличие от C ++ и Java, в основной программе нет включения, поэтому можно будет скомпилировать.

Как мой компилятор Фортрана узнает, что есть другая библиотека, которую я использую?

Яиспользуя photran из Eclipse.

Файл MAKE:

.PHONY: all clean

# Change this line if you are using a different Fortran compiler
FORTRAN_COMPILER = gfortran

all: src/Engine.f
    $(FORTRAN_COMPILER) -O2 -g \
        -o bin/Engine.exe \
        src/Engine.f

clean:
    rm -f bin/Engine.exe *.mod

ошибки, которые я получаю при компиляции:

undefined reference to (name of function in **LIB.f**)

1 Ответ

0 голосов
/ 26 сентября 2018
.PHONY: all clean
all: Engine.exe

# Change this line if you are using a different Fortran compiler
FORTRAN_COMPILER = gfortran
FORTRAN_FLAGS=-O2 -g

%.o: src/%.f
    $(FORTRAN_COMPILER) $(FORTRAN_FLAGS) -c $<

Engine.exe: Lib.o Engine.o
    $(FORTRAN_COMPILER) $(FORTRAN_FLAGS) \
        -o bin/Engine.exe \
        Lib.o Engine.o

clean:
    rm -f *.o *.mod

В FORTRAN 77 компилятору "просто" нужна функция, которая должна быть предоставлена ​​в файле .o во время ссылки.Вы можете проверить Makefile ниже, он должен делать то, что вы хотите.

Современные версии Fortran используют файлы модулей для структурирования библиотек, если вы когда-либо обновитесь до этого.

...