【问题标题】:Compile Fortran source with Accelerate Framework (LAPACK and BLAS) [duplicate]使用 Accelerate Framework(LAPACK 和 BLAS)编译 Fortran 源代码 [重复]
【发布时间】:2015-06-08 16:41:33
【问题描述】:

我希望编译使用LAPACKBLAS 中的函数的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)

【问题讨论】:

  • 也许发布您收到的确切错误消息。
  • 大写不重要(注意accelerateAccelerate)?你一定要发布错误信息。
  • @Vladimir F,我认为这里的大写并不重要。但只是为了确保我同时更改为小写和大写,甚至尝试了我从终端运行的示例。无论如何它都有效。
  • 显示你的 Makefile,$LDFLAGS 在那里使用吗?请注意,您的错误消息中的链接命令中没有任何加速。你必须得到它。

标签: macos makefile frameworks fortran


【解决方案1】:

编译器告诉您它找不到sgesv,这是(在您的情况下)加速框架的一部分。从错误消息中,我看到 Makefile 产生的命令是

gfortran -g test.o  -o a.out

缺少链接器指令。

因此,在 Makefile 中,您缺少实际命令中的链接标志:

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

【讨论】:

  • 已添加。同样的错误。
  • 你能在命令/错误信息中看到框架指令吗?
  • 这行得通。 @Alexander Vogt 原来的 makefile 中有一个错字。
  • @DanishHabib 如果它解决了问题,您应该接受答案。
  • 我现在做到了。对不起,这个网站的新手。你们真棒。另外,我现在看到这个问题在其他地方也得到了回答。我现在要删除这个吗?另外,另一个问题不是我作为菜鸟想出来的。
猜你喜欢
  • 2021-04-24
  • 1970-01-01
  • 2016-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-15
  • 1970-01-01
相关资源
最近更新 更多