2015-06-08 90 views
1

我希望編譯使用LAPACKBLAS中的函數的Fortran源代碼。當我編譯單個源代碼文件時使用Accelerate Framework編譯Fortran源代碼(LAPACK和BLAS)

gfortran -g -framework accelerate test.f 

它的工作原理

但是,我有很多源代碼文件,我想編譯通過Makefile。當我修改我Makefile加入:

LDFLAGS= -framework Accelerate 

(不知道這是正確的方式,但是這是一個人怎麼好像做) 我得到的錯誤是內部使用的LAPACK功能無法識別。

有人能告訴我在makefile中做什麼修改嗎?

這裏是我的錯誤:

gfortran -g test.o -o a.out 
Undefined symbols for architecture x86_64: 
    "_sgesv_", referenced from: 
    _MAIN__ in test.o 
ld: symbol(s) not found for architecture x86_64 
collect2: error: ld returned 1 exit status 
make: *** [a.out] Error 1 

sgesv是被調用的子程序LAPACK應計入在veclib /加速框架。

這裏是我的Makefile文件的副本:

# 
#    
# 
#FFLAGS = -fast 
#FFLAGS = gfortran 
FC = gfortran 
LFLAGS = gfortran -g 
LINK = gfortran -g 
LDFLAGS = -framework Accelerate 
OBJECTS = test.o\ 

SOURCES = test.f\ 

a.out: $(OBJECTS) 
    $(LINK) $(OBJECTS) -o a.out 

對於其他人:

這裏是我做錯了。最後一行應改變: $(LINK)$(對象)-o a.out的$(LDFLAGS)

+3

也許張貼您收到確切的錯誤信息。 –

+1

大寫字母不重要(注意'加速'和'加速')?你一定要發佈錯誤信息。 –

+0

@Vladimir F,我認爲這裏大寫不重要。但只是爲了確保我將它們都更改爲大寫和小寫,甚至嘗試了我從終端兩種方式運行的示例。它無論如何工作。 –

回答

1

編譯器告訴你它找不到sgesv,這是(在你的情況下)加快框架的一部分。從該錯誤消息,我看到,從生成文件產生的命令是

gfortran -g test.o -o a.out 

其缺少接頭指令。

所以,在Makefile中你缺少的鏈接標誌在實際的命令:

a.out: $(OBJECTS) 
    $(LINK) $(OBJECTS) -o a.out $(LDFLAGS) 
+0

已添加。同樣的錯誤。 –

+0

你能看到命令/錯誤消息中的框架指令嗎? –

+0

這工作。 @Alexander Vogt原始makefile中有一個錯字。 –