Подтвердить что ты не робот

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
4b9b3361

Ответ 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.