首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >连接LAPACK/BLAS库

连接LAPACK/BLAS库
EN

Stack Overflow用户
提问于 2010-05-10 08:31:55
回答 3查看 3.9K关注 0票数 1

背景:

我正在编写一个用C和Fortran 77混合编写的项目,现在需要将LAPACK/BLAS库链接到该项目(全部在Linux环境中)。所讨论的LAPACK是来自netlib.org的3.2.1版本(包括BLAS)。库是使用顶级Makefile编译的(make lapacklib和make blaslib)。

问题:

在链接期间,错误消息声称从LAPACK例程调用的某些(并非所有)BLAS例程是未定义的。这让我有些头疼,但当(在Makefile中)改变了要链接的库的出现顺序时,这个问题最终得到了解决。

代码:

在下面,(a)给出错误,而(b)没有。链接由(c)执行。

代码语言:javascript
复制
 (a) LIBS  = $(LAPACK)/blas\_LINUX.a $(LAPACK)/lapack\_LINUX.a
代码语言:javascript
复制
 (b) LIBS  = $(LAPACK)/lapack\_LINUX.a $(LAPACK)/blas\_LINUX.a
代码语言:javascript
复制
 (c) gcc -Wall -O -o $@ project.o project.a $(LIBS)

问题:

只有一些例程的未定义引用的原因是什么,以及是什么使外观的顺序相关?

EN

回答 3

Stack Overflow用户

发布于 2012-06-20 13:38:18

LAPACK库需要来自BLAS的东西,链接器从左到右搜索。因此,在LAPACK (选项(b))之后使用BLAS是有效的。

如果希望它始终工作,不管顺序如何,可以使用链接器组:

代码语言:javascript
复制
-Wl,--start-group $(LAPACK)/blas_LINUX.a $(LAPACK)/lapack_LINUX.a -Wl,--end-group

这告诉链接器循环遍历库,直到所有符号都被解析为止(或者直到它注意到循环不会有帮助)。

票数 1
EN

Stack Overflow用户

发布于 2010-05-11 00:02:27

通常,人们总是将“更基本/基本”库放在“不太基本/基本”的右侧,即链接器将查找文件的右侧,以定义出现在该文件中的函数。对于现代的链接器来说,这被认为不再是必要的了,但是它总是一个好主意(就像你的例子)。我不知道为什么它只与几个例行公事有关。

票数 0
EN

Stack Overflow用户

发布于 2011-03-10 20:59:23

clapack是否用作LAPACK实现?如果没有,你可以试着用它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2801297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档