Lgfortran не найден
Я использую Ubuntu 10.04 и пытаюсь скомпилировать код, который использует gfortran. В какой-то момент Makefiles делает:
-L. -lgfortran
и я получаю сообщение об ошибке
/usr/bin/ld: cannot find -lgfortran
хотя он установлен:
ldconfig -p | grep fortran
libgfortran.so.3 (libc6,x86-64) => /usr/lib/libgfortran.so.3
Как я могу это исправить?
P.S: Makefile:
## FLAGS
CC:= gcc
C++:= g++
CFLAGS:= -c -O -Dintel -g
FC:= gfortran
FFLAGS:= -c -O -cpp -g
LD:= g++
LDFLAGS:= -O
WETTER_CGAL_FLAGS:= -g
#WETTER-Data
WETTER_cgal: weather.cpp surface_alg.h $(WETTER_CGAL_OBJECTS) WATT_interface.h data.cpp
$(C++) $(WETTER_CGAL_FLAGS) -c weather.cpp -frounding-math
$(C++) -c data.cpp -frounding-math
$(LD) $(WETTER_CGAL_OBJECTS) weather.o data.o -o WETTER_cgal -L. -lgfortran -lgmp -lCGAL -frounding-math -fp-model
Ответы
Ответ 1
По какой-либо причине ваша версия gfortran
отличается от версии вашего g++
? Или, может быть, он установлен в другом месте?
Параметр -lname
(в этом случае name
- gfortran
) указывает компоновщику на поиск библиотечного файла с именем libname.a
в пути поиска библиотеки. Если он найден и статическая привязка не применяется с помощью параметра -[B]static
, компоновщик снова будет искать для libname.so
и вместо него ссылаться на него (если он найден). Если libname.a
не найден, будет выдана ошибка, несмотря на наличие libname.so
.
В вашей установке gfortran
должен быть libgfortran.a
. Найдите его с помощью find
и укажите путь к g++
с помощью -L/path/to/compiler/libs
. Если g++
является той же версией, что и ваш gfortran
, путь к libgfortran.a
уже будет присутствовать в пути поиска библиотеки (поскольку как статические библиотеки C/С++, так и Fortran находятся в одном месте). Он не будет присутствовать, если оба компилятора отличаются своей версией.
Например, в 64-битной системе на основе RedHat libgfortran.a
находится в /usr/lib/gcc/x86_64-redhat-linux/<GCC version>/
, а общий libgfortran.so.*
находится в /usr/lib64
.
Альтернативным решением является замена -lgfortran
на /usr/lib/libgfortran.so.3
.
Опция -L.
скорее связана с -lCGAL
, чем с -lgfortran
.
Ответ 2
У меня была такая же проблема сегодня при компиляции ATLAS и удалось исправить ее с помощью символической ссылки от libgfortran.so.3
до libgfortran.so
.
Ответ 3
Просто убедитесь, что вы:
gcc --version
и
gfortan --version
То же самое.
/usr/bin/
Содержит различные версии.
Например: Если gcc--version returns 4.7.3
и gfortran --version 4.8
, простой взлом может состоять в следующем:
sudo cp /usr/bin/gcc-4.8 /usr/bin/gcc
Он должен работать.
Ответ 4
У меня была такая же проблема, и я попробовал следующую команду. Проблема была решена с помощью этого:
sudo ln -s /usr/lib/x86_64-linux-gnu/libgfortran.so.3 /usr/lib/libgfortran.so
Ответ 5
Как это сделать?
Альтернативное решение - заменить -lgfortran
на /usr/lib/libgfortran.so.3
.