【发布时间】:2015-06-08 16:41:33
【问题描述】:
我希望编译使用LAPACK 和BLAS 中的函数的Fortran 源代码。当我编译单个源代码文件时,例如
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/accelerate 框架中。
这是我的 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) $(OBJECTS) -o a.out $(LDFLAGS)
【问题讨论】:
-
也许发布您收到的确切错误消息。
-
大写不重要(注意
accelerate和Accelerate)?你一定要发布错误信息。 -
@Vladimir F,我认为这里的大写并不重要。但只是为了确保我同时更改为小写和大写,甚至尝试了我从终端运行的示例。无论如何它都有效。
-
显示你的 Makefile,$LDFLAGS 在那里使用吗?请注意,您的错误消息中的链接命令中没有任何加速。你必须得到它。
标签: macos makefile frameworks fortran