Вопрос по linker, ubuntu – Лгфортран не найден

10

Я использую 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
сделано, вопросы были обновлены с этой информацией Open the way
Не могли бы вы предоставить минимальный Makefile, который выдает ошибку? Это обязательно должно быть его ошибкой, так как ваша оболочка выглядит нормально. Luca Geretti

Ваш Ответ

4   ответа
4

и я смог исправить ее, используя символическую ссылкуlibgfortran.so.3 вlibgfortran.so.

Хорошо, это сработало для меня, но почему это сработало? Кроме того, было бы возможно просто создать ссылку вld.so.conf.d/?
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

Он должен работать.

В моей системе это указывало на / etc / alternatives / gcc, я использовалalternatives --config gcc Команда для выбора соответствующей версии GCC
12

gfortran версия отличается от версии вашегоg++? Или, может быть, он установлен в другом месте?

-lname вариант (в этом случаеname являетсяgfortran) поручает компоновщику выполнить поиск файла библиотеки с именемlibname.a в пути поиска библиотеки. Если найдено и статическое связывание не выполняется-[B]static Опция компоновщик будет искать еще разlibname.so и вместо этого ссылку на него (если найден). Еслиlibname.a не найдена ошибка будет выдана несмотря на наличиеlibname.so.

Там должно бытьlibgfortran.a где-то в вашемgfortran монтаж. Ищите его сfind и предоставить путь кg++ с-L/path/to/compiler/libs, Еслиg++ та же версия, что и вашаgfortran путь кlibgfortran.a будет уже присутствовать в пути поиска библиотеки (поскольку статические библиотеки C / C ++ и Fortran находятся в одном месте). Это не будет присутствовать, если оба компилятора отличаются по своей версии.

Например, в 64-битной системе на базе RedHatlibgfortran.a находится в/usr/lib/gcc/x86_64-redhat-linux/<GCC version>/ в то время как общийlibgfortran.so.* расположены в/usr/lib64.

Альтернативным решением является замена-lgfortran с/usr/lib/libgfortran.so.3.

-L. вариант скорее связан с-lCGAL чем-lgfortran.

3

и я попробовал следующую команду. Проблема была решена с помощью этого:

sudo ln -s /usr/lib/x86_64-linux-gnu/libgfortran.so.3 /usr/lib/libgfortran.so

И это решило проблему или что случилось, когда вы попробовали это?

Похожие вопросы