2012-06-04 108 views
8

我使用Ubuntu 10.04並嘗試編譯一些使用gfortran的代碼。在某些時候做的Makefile:lgfortran未找到

-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

你可以提供一個簡單的Makefile產生錯誤:使用這種方法的問題得到了解決?它必然是它的錯,因爲你的shell環境看起來很好。 –

+0

完成後,問題已更新與該信息 – flow

回答

12

不通過你的gfortran版本從g++的版本不同,任何機會呢?或者也許它安裝在不同的位置?

-lname選項(此例中爲namegfortran)指示鏈接程序在庫搜索路徑中搜索名爲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/C++和Fortran靜態庫都駐留在同一位置)。如果兩個編譯器的版本不同,它將不會出現。

例如一個64位的RedHat基於系統libgfortran.a位於/usr/lib/gcc/x86_64-redhat-linux/<GCC version>/而共享libgfortran.so.*位於/usr/lib64上。

另一種解決方案是用/usr/lib/libgfortran.so.3替換-lgfortran

-L.選項與-lCGAL-lgfortran更相關。

4

我今天在編譯ATLAS時遇到同樣的問題,並且能夠使用從libgfortran.so.3libgfortran.so的符號鏈接來修復它。

+0

好吧,這對我有效,但它爲什麼工作?另外,是否可以在'ld.so.conf.d /'中創建鏈接? – Seanny123

3

只要確保你:

gcc --version 

而且

gfortan --version 

是一樣的。

/usr/bin/ 

包含不同的版本。

例如:如果gcc--version returns 4.7.3gfortran --version 4.8,一個簡單的黑客可能會做到以下幾點。

sudo cp /usr/bin/gcc-4.8 /usr/bin/gcc 

它應該工作。

+0

在我的系統中,它指向/ etc/alternatives/gcc,我使用'alternatives --config gcc'命令來選擇適當版本的gcc – Jijo

2

我有同樣的問題,並嘗試以下命令。

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

+0

並且它是否解決了問題或當您嘗試時發生了什麼? –