У меня есть устаревший код, написанный с использованием fortran 77. Я пытаюсь построить его с помощью gfortran. Но я, кажется, терпеть неудачу на этапе, когда я включаю библиотеки в сборку. Десятки * .f исходных файлов компилируются отлично, но когда они связаны, я получаю кучу ошибок «неопределенной ссылки», связанных с подпрограммами и функциями, которые определены в моих библиотеках. Я уже запускал make-файл для библиотек, поэтому переменные, которые мне нужны, должны быть экспортированы. Я играю с опцией «-L», но не могу заставить его работать по своему усмотрению.Использование gfortran с библиотеками
Во-первых, вот мой синтаксис связующей линии в моем Makefile:
29 $(PROGRAM): $(SRCS) $(LIBS)
30 $(FC) $(FLFLAGS) -o [email protected] $+ -L$(DIRLIB)
ПРОГРАММА это название программы, SRCS являются все скомпилированные исходные файлы, ЛИЭС установлен в двух различных файлов - архивный файл (file.a) и файл file.o. FC - gfortran, на данный момент у меня нет каких-либо конкретных флагов привязки для FLFLAGS, а DIRLIB - основной каталог библиотек. Дело в том, что мои файлы * .o, возникшие в результате создания моих библиотекарей, не находятся в основном каталоге DIRLIB. DIRLIB содержит несколько каталогов, все с их собственными * .o-файлами, которые необходимы моему коду.
Я попытался добавить каждую отдельную директорию после опции -L (например, DIRLIB/DIR1/*. O DIRLIB/DIR2/*. O DIRLIB/DIR3/*. O), но в конечном итоге я начинаю получать ошибки, что некоторые подпрограммы многократно определено. Вся эта бизнес-пользовательских библиотек и архивных файлов просто смущает меня, и я довольно новичок в создании make-файлов в первую очередь, поэтому я просто снимаю в темноте, чтобы кто-то мог помочь мне сбросить некоторый свет на этом.
Я не знаю ответа на ваш вопрос, но попробовал ли вы * readelf -a * команду в любом из файлов * \ *. O *? * Readelf * по крайней мере скажет вам, какие символы, если таковые имеются, пытается найти компоновщик. Это может дать вам понять, что делать дальше. Удачи. – thb