Я впервые пытаюсь скомпилировать код FORTRAN с помощью make-файла. ОС — Ubuntu 12.04 LTS 64 бит. Я столкнулся со следующими ошибками:
gfortran -o przm3123.exe canopy.o chem.o cnfuns.o cropdate.o datemod.o debug.o debug_cn.o f2kcli.o floatcmp.o furrow.o general.o i_errchk.o infnan.o inivar.o ioluns.o iosubs.o lambertw.o m_readvars.o utils.o wind.o fcscnc.o przm3.o rsexec.o rsinp1.o rsinp2.o rsinp3.o rsmcar.o rsmisc.o rsprz1.o rsprz2.o rsprz3.o rsprzn.o rsutil.o rsvado.o -L ../libanne4.0/lib -lwdm -ladwdm -lutil
/usr/bin/ld: cannot find -lwdm
/usr/bin/ld: cannot find -ladwdm
collect2: ld returned 1 exit status
make: *** [przm3123.exe] Error 1
Ключевым элементом makefile является:
przm2_LIBS = -L ../libanne4.0/lib -lwdm -ladwdm -lutil
Могу ли я что-нибудь сделать, чтобы исправить эту ошибку? Должен ли я попробовать другие компиляторы?
libwdm.so
иlibadwdm.so
. Я бы предположил, что они должны быть в этом каталогеlibanne4.0/lib
. - person wkl   schedule 08.05.2012libwdm.a
иlibadwdm.a
есть. - person TTT   schedule 08.05.2012przm2_LIBS = -L../libanne4.0/lib -Wl,-Bdynamic -lutil -Wl,-Bstatic -lwdm -ladwdm
— я предполагаю, чтоutil
— этоlibutil.so
(разделяемая библиотека), так как он не жаловался на это. - person wkl   schedule 08.05.2012/usr/bin/ld: cannot find -lwdm /usr/bin/ld: cannot find -ladwdm /usr/bin/ld: cannot find -lgcc_s /usr/bin/ld: cannot find -lgcc_s /usr/bin/ld: cannot find -lgcc_s
- person TTT   schedule 08.05.2012libanne4.0/lib
? Кроме того, измените строку наprzm2_LIBS = -L(path/to/libanne4.0/lib) -Wl,-Bstatic -lwdm -ladwdm -Wl,-Bdynamic -lutil
- материалlgcc_s
был потому, что я установил компоновщик на использование статической компоновки в последнюю очередь, поэтому это меняет его на использование динамической компоновки. - person wkl   schedule 08.05.2012gfortran: error: unrecognized option ‘-wdm’
. Затем я удалил опцию-wdm
. Аналогичная ошибка msg '/usr/bin/ld: не удается найти -ladwdm' - person TTT   schedule 08.05.2012-lwdm
. Очень, очень хитрый метод — использовать полные пути для ссылки, например:gfortran (the regular stuff) /path/to/libwdm.a /path/to/libadwdm.a -L../libanne4.0/lib -util
. - person wkl   schedule 08.05.2012/home/th/Desktop/przm_ed/libanne4.0/lib/wdmlib.a /home/th/Desktop/przm_ed/libanne4.0/lib/adwdmlib.a /home/th/Desktop/przm_ed/libanne4.0/lib/utillib.a
и получил ответы/home/th/Desktop/przm_ed/libanne4.0/lib/utillib.a(dttmsn.o): In function
sydate_': dttmsn.f:(.text+0x2c5): неопределенная ссылка наidate_' /home/th/Desktop/przm_ed/libanne4.0/lib/utillib.a(dttmsn.o): In function
sytime_': dttmsn.f:(.text+0x32c): неопределенная ссылка наitime_' collect2: ld returned 1 exit status
Означает ли это, что эти пути принимаются? - person TTT   schedule 08.05.2012idate_
иitime_
не найдены. Я не знаю, откуда они, может быть, это специфично для gfortran. - person wkl   schedule 08.05.2012