Стандартная библиотека F90 для Makefile
Вопрос
Приветствую Всех,
Пытаюсь скомпилировать с использованием g ++, и мне нужно связать стандартные библиотеки f90 (или даже f77) для некоторых исходных кодов fortran в моем Makefile.Я нигде не могу найти его названия.
Создающий файл:
products: SlowDynamic.exe
SlowDynamic.exe: main.o SA.o mersenne.o CFE.o BCs.o EMatrix.o Numbering.o KMatrix.o Solve.o MA_57.o blas.o MA_57_Depend.o Metis.o
g++ -L/usr/sfw/lib -R/usr/sfw/lib -lgcc_s -lstdc++ -o SlowDynamic.exe main.o \
SA.o mersenne.o CFE.o MA_57.o blas.o MA_57_Depend.o Metis.o\
BCs.o EMatrix.o Numbering.o KMatrix.o Solve.o
main.o: main.cpp
g++ -c -o main.o main.cpp
SA.o: SA.cpp
g++ -c -o SA.o SA.cpp
mersenne.o: mersenne.cpp
g++ -c -o mersenne.o mersenne.cpp
CFE.o: CFE.c
gcc -c -o CFE.o CFE.c
MA_57.o: MA_57.f
f77 -c -o MA_57.o MA_57.f
blas.o: blas.f
f77 -c -o blas.o blas.f
MA_57_Depend.o: MA_57_Depend.f
f77 -c -o MA_57_Depend.o MA_57_Depend.f
Metis.o: Metis.f
f77 -c -o Metis.o Metis.f
BCs.o: BCs.c
gcc -c -o BCs.o BCs.c
EMatrix.o: EMatrix.c
gcc -c -o EMatrix.o EMatrix.c
Numbering.o: Numbering.c
gcc -c -o Numbering.o Numbering.c
KMatrix.o: KMatrix.c
gcc -c -o KMatrix.o KMatrix.c
Solve.o : Solve.c
gcc -c -o Solve.o Solve.c
clean:
rm *.o Main.exe *.gpi
Компилятор:
birch $ make
mksh: Warning: newline is not last character in file Makefile
Current working directory /u/f/osv20/Y4-UNIX/complete
g++ -L/usr/sfw/lib -R/usr/sfw/lib -lgcc_s -o SlowDynamic.exe main.o \
SA.o mersenne.o CFE.o MA_57.o blas.o MA_57_Depend.o Metis.o\
BCs.o EMatrix.o Numbering.o KMatrix.o Solve.o
Undefined first referenced
symbol in file
__f90_sfw_i4 MA_57.o
__f90_sfw_ch MA_57.o
__f90_sfw_r4 MA_57.o
__f90_ifw_ch MA_57.o
__f90_ifw_r4 MA_57.o
__nintf MA_57.o
__s_cmp blas.o
__r_sign MA_57_Depend.o
__f90_sifw MA_57.o
__f90_ssfw MA_57.o
__f90_stop blas.o
__f90_esfw MA_57.o
__f90_eifw MA_57.o
ld: fatal: Symbol referencing errors. No output written to SlowDynamic.exe
collect2: ld returned 1 exit status
*** Error code 1
make: Fatal error: Command failed for target `SlowDynamic.exe'
Результаты выполнения 'f77 -v hello.f'
amos $ f77 -v hello.f
NOTICE: Invoking /usr/bin/f90 -f77 -ftrap=%none -v hello.f
### command line files and options (expanded):
### -f77=%all -ftrap=%none -v hello.f -lf77compat
### f90: Note: NLSPATH = /opt/SUNWspro/prod/bin/../lib/locale/%L/LC_MESSAGES/%N.cat:/opt/SUNWspro/prod/bin/../../lib/locale/%L/LC_MESSAGES/%N.cat
/opt/SUNWspro/prod/bin/f90comp -y-o -yhello.o -ev -y-ftrap=%none -m3 -dq -y-fbe -y/opt/SUNWspro/prod/bin/fbe -y-xarch=generic -y-s -H "/opt/SUNWspro/prod/bin/f90 -f77 -ftrap=%none -v " -y-xcache=generic -xcache=generic -I/opt/SUNWspro/prod/include/f95/v8 -p/opt/SUNWspro/prod/lib/modules -y-verbose -xall -xmemalign=8i -y-xmemalign=8i -f77=%all -y-xdbggen=no%stabs+dwarf2 -y-xdbggen=incl -xassume_control=optimize -y-xassume_control=optimize -iorounding=processor-defined -xhasc=yes hello.f
hello.f:
MAIN hellow:
### f90: Note: LD_LIBRARY_PATH = (null)
### f90: Note: LD_RUN_PATH = (null)
### f90: Note: LD_OPTIONS = (null)
/usr/ccs/bin/ld -t -R/opt/SUNWspro/lib/sparc:/opt/SUNWspro/lib -o a.out /opt/SUNWspro/prod/lib/crti.o /opt/SUNWspro/prod/lib/crt1.o /opt/SUNWspro/prod/lib/misalign.o /opt/SUNWspro/prod/lib/values-xi.o -Y P,/opt/SUNWspro/lib/sparc:/opt/SUNWspro/prod/lib/sparc:/opt/SUNWspro/lib:/opt/SUNWspro/prod/lib:/usr/ccs/lib:/lib:/usr/lib hello.o -lf77compat -lfui -lfai -lfai2 -lfsumai -lfprodai -lfminlai -lfmaxlai -lfminvai -lfmaxvai -lfsu -lsunmath -Bdynamic -lmtsk -lm -lc /opt/SUNWspro/prod/lib/crtn.o
rm hello.o
Результаты выполнения 'f90 -v hello.f'
amos $ f90 -v hello.f
### command line files and options (expanded):
### -v hello.f
### f90: Note: NLSPATH = /opt/SUNWspro/prod/bin/../lib/locale/%L/LC_MESSAGES/%N.cat:/opt/SUNWspro/prod/bin/../../lib/locale/%L/LC_MESSAGES/%N.cat
/opt/SUNWspro/prod/bin/f90comp -y-o -yhello.o -ev -y-ftrap=common -m3 -dq -y-fbe -y/opt/SUNWspro/prod/bin/fbe -y-xarch=generic -y-s -H "/opt/SUNWspro/prod/bin/f90 -v " -y-xcache=generic -xcache=generic -I/opt/SUNWspro/prod/include/f95/v8 -p/opt/SUNWspro/prod/lib/modules -y-verbose -xall -xmemalign=8i -y-xmemalign=8i -y-xdbggen=no%stabs+dwarf2 -y-xdbggen=incl -xassume_control=optimize -y-xassume_control=optimize -iorounding=processor-defined -xhasc=yes hello.f
### f90: Note: LD_LIBRARY_PATH = (null)
### f90: Note: LD_RUN_PATH = (null)
### f90: Note: LD_OPTIONS = (null)
/usr/ccs/bin/ld -t -R/opt/SUNWspro/lib/sparc:/opt/SUNWspro/lib -o a.out /opt/SUNWspro/prod/lib/crti.o /opt/SUNWspro/prod/lib/crt1.o /opt/SUNWspro/prod/lib/misalign.o /opt/SUNWspro/prod/lib/values-xi.o -Y P,/opt/SUNWspro/lib/sparc:/opt/SUNWspro/prod/lib/sparc:/opt/SUNWspro/lib:/opt/SUNWspro/prod/lib:/usr/ccs/lib:/lib:/usr/lib hello.o -lfui -lfai -lfai2 -lfsumai -lfprodai -lfminlai -lfmaxlai -lfminvai -lfmaxvai -lfsu -lsunmath -Bdynamic -lmtsk -lm -lc /opt/SUNWspro/prod/lib/crtn.o
rm hello.o
Результаты успешной компиляции с использованием f77:
amos $ make
mksh: Warning: newline is not last character in file Makefile
Current working directory /u/f/osv20/Y4-UNIX/complete
g++ -c -o main.o main.cpp
In file included from main.cpp:16:
SA.h:85:9: warning: no newline at end of file
main.cpp:38:2: warning: no newline at end of file
g++ -c -o SA.o SA.cpp
In file included from SA.cpp:22:
SA.h:85:9: warning: no newline at end of file
In file included from SA.cpp:23:
CFE.h:25:8: warning: no newline at end of file
SA.cpp:468:4: warning: no newline at end of file
g++ -c -o mersenne.o mersenne.cpp
gcc -c -o CFE.o CFE.c
In file included from BCs.h:9,
from CFE.c:29:
fg_types.h:38:7: warning: no newline at end of file
In file included from CFE.c:29:
BCs.h:15:84: warning: no newline at end of file
In file included from CFE.c:32:
KMatrix.h:12:171: warning: no newline at end of file
In file included from CFE.c:34:
Solve.h:9:91: warning: no newline at end of file
CFE.c: In function `CFE':
CFE.c:145: warning: `return' with a value, in function returning void
gcc -c -o BCs.o BCs.c
In file included from BCs.h:9,
from BCs.c:9:
fg_types.h:38:7: warning: no newline at end of file
In file included from BCs.c:9:
BCs.h:15:84: warning: no newline at end of file
BCs.c:74:2: warning: no newline at end of file
gcc -c -o EMatrix.o EMatrix.c
In file included from EMatrix.h:9,
from EMatrix.c:9:
fg_types.h:38:7: warning: no newline at end of file
EMatrix.c:78:2: warning: no newline at end of file
gcc -c -o Numbering.o Numbering.c
In file included from Numbering.h:8,
from Numbering.c:8:
fg_types.h:38:7: warning: no newline at end of file
Numbering.c:144:3: warning: no newline at end of file
gcc -c -o KMatrix.o KMatrix.c
In file included from KMatrix.h:8,
from KMatrix.c:9:
fg_types.h:38:7: warning: no newline at end of file
In file included from KMatrix.c:9:
KMatrix.h:12:171: warning: no newline at end of file
KMatrix.c:194:2: warning: no newline at end of file
gcc -c -o Solve.o Solve.c
In file included from Solve.c:8:
Solve.h:9:91: warning: no newline at end of file
Solve.c:95:2: warning: no newline at end of file
f77 -c -o MA_57.o MA_57.f
NOTICE: Invoking /usr/bin/f90 -f77 -ftrap=%none -c -o MA_57.o MA_57.f
MA_57.f:
ma57i:
ma57a:
ma57b:
ma57c:
ma57q:
ma57r:
ma57u:
ma57s:
ma57t:
ma57d:
ma57e:
ma57g:
ma57j:
ma57k:
ma57f:
ma57l:
ma57m:
ma57n:
ma57o:
ma57p:
ma57w:
ma57x:
ma57y:
ma57v:
ma57h:
ma57z:
f77 -c -o blas.o blas.f
NOTICE: Invoking /usr/bin/f90 -f77 -ftrap=%none -c -o blas.o blas.f
blas.f:
sgemm:
stpsv:
isamax:
xerbla:
lsame:
sgemv:
f77 -c -o MA_57_Depend.o MA_57_Depend.f
NOTICE: Invoking /usr/bin/f90 -f77 -ftrap=%none -c -o MA_57_Depend.o MA_57_Depend.f
MA_57_Depend.f:
mc47a:
mc47b:
mc71a:
mc34a:
mc59a:
mc59b:
mc59c:
mc59d:
mc59e:
mc59f:
ma27i:
ma27a:
ma27b:
ma27c:
ma27g:
ma27h:
ma27u:
ma27j:
ma27k:
ma27l:
ma27m:
ma27n:
ma27o:
ma27p:
ma27q:
ma27r:
mc64i:
mc64a:
mc64b:
mc64d:
mc64e:
mc64f:
mc64r:
mc64s:
mc64q:
mc64u:
mc64w:
mc21a:
mc21b:
fd15a:
f77 -c -o Metis.o Metis.f
NOTICE: Invoking /usr/bin/f90 -f77 -ftrap=%none -c -o Metis.o Metis.f
Metis.f:
metis_nodend:
f77 -L/usr/sfw/lib -R/usr/sfw/lib -lgcc_s -lstdc++ -o SlowDynamic.exe main.o \
SA.o mersenne.o CFE.o MA_57.o blas.o MA_57_Depend.o Metis.o\
BCs.o EMatrix.o Numbering.o KMatrix.o Solve.o
NOTICE: Invoking /usr/bin/f90 -f77 -ftrap=%none -L/usr/sfw/lib -R/usr/sfw/lib -lgcc_s -lstdc++ -o SlowDynamic.exe main.o SA.o mersenne.o CFE.o MA_57.o blas.o MA_57_Depend.o Metis.o BCs.o EMatrix.o Numbering.o KMatrix.o Solve.o
Решение
Какую версию GCC вы используете?Компилятор fortran в GCC со временем полностью изменился (g77 vs gfortran), поэтому правильный ответ очень зависит от точных версий.Прошло некоторое время с тех пор, как мне нужно было это делать (и я использовал старые версии g77 - так что, возможно, что-то изменилось), но я помню, что в то время было несколько вариантов:
- Попробуйте связать с помощью g77 и включите библиотеку -lstdc ++ (и, возможно, -lm?)
- Попробуйте связать с помощью g ++ и включите библиотеки -lg2c -lm (и, возможно, -lfrtbegin?)
Если используется более новый gfortran, то -lgfortran должен работать при связывании с g ++ и -lstdc ++ при связывании с gfortran.
Вы также хотите убедиться, что команды g ++ и f77 в вашем makefile выполняют те команды, которые вы ожидаете от них выполнения (напримерневозможен доступ к исполняемым файлам в неожиданных каталогах или разных / несовместимых версиях).
Редактировать:Судя по вашим недавним правкам в вашем вопросе, вы, похоже, пытаетесь связать f77 компилятора SUN с GCC g ++.Я не думаю, что это возможно.Попробуйте использовать g77 от GCC или gfortran вместо SUN f77.
Другие советы
Раугнар,
Я отсылаю вас к мой ответ к вашему предыдущему вопросу о неразрешенных символах.
Просто беги:
f77 -v something.f
в автономной программе Fortran90 компилятор покажет, какие именно библиотеки поддержки связаны по умолчанию.
В Fortran нет "стандартных библиотек".У него действительно есть много встроенных функций, но они являются частью языка, определенного стандартом.
Ответы на комментарии, поскольку поле комментариев немного ограничительно в отношении количества символов:
@Майкл - Да, ты можешь так сказать.Но, тем не менее, это не то же самое, что с другими языками, к которым вы, вероятно, привыкли.Я имею в виду вот что;когда вы компилируете и создаете программу на fortran, компилятор или компоновщик не требует, чтобы вы включали библиотеки в процесс.Это внутренняя функция компилятора.Это относится к "стандартным" функциям (встроенным и тому подобному).
Если вы используете какие-то внешние функции или подпрограммы (например, некоторые процедуры построения графиков), то вам необходимо включить их отдельно.
Но если вы используете стандартные математические функции, которые являются частью языка, то ваша работа закончена.Вы пишете свою программу, компилируете и создаете ее.Нет необходимости знать, где и как реализованы эти функции, где хранятся их реализации и тому подобное.Это работа компилятора.
Наконец-то исправили решение с помощью набора всевозможных советов.
Как только я понял, что использую SUN, а не GCC, я переключился на компиляцию с помощью cc (gcc), CC (g ++) и f95 (f77).
Что решило проблему, так это вставка всей строки компоновщика из подробного отзыва f77 (выше в основном сообщении) и постепенное удаление тех частей, которые не внесли свой вклад.В конце был добавлен следующий текст:
-t -R/opt/SUNWspro/библиотека/sparc:/opt/SUNWspro/библиотека -Y P,/opt/SUNWspro/lib/sparc:/opt/SUNWspro/prod/lib/sparc:/opt/SUNWspro/lib:/opt/SUNWspro/prod/lib:/usr/ccs/lib:/lib:/usr/ библиотека -lfui -lfai -lfai2 -lfsumai -lfprodai -lfminlai -lfmaxlai -lfminvai -lfmaxvai -lfsu -lsunmath -Bdynamic -lmtsk -lm -lc