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

どうすれば修正できますか?

PS: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
4

4 に答える 4

13

ひょっとして、あなた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 ビットの 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ます。

于 2012-06-04T16:21:42.060 に答える
5

今日、ATLAS をコンパイルしたときに同じ問題が発生し、 からlibgfortran.so.3へのシンボリック リンクを使用して修正できましたlibgfortran.so

于 2012-06-05T15:08:55.810 に答える