背景:
我正在开发一个混合使用 C 和 Fortran 77 编写的项目,现在需要将 LAPACK/BLAS 库链接到项目(全部在 Linux 环境中)。有问题的 LAPACK 是来自 netlib.org 的 3.2.1 版(包括 BLAS)。这些库是使用顶级 Makefile 编译的(make lapacklib 和 make blaslib)。
问题:
在链接期间,错误消息声称从 LAPACK 例程调用的某些(不是全部)BLAS 例程未定义。这让我有些头疼,但是当(在 Makefile 中)要链接的库的出现顺序发生更改时,问题最终得到了解决。
代码:
在下面,(a)给出错误,而(b)没有。链接由(c)执行。
(a) LIBS = $(LAPACK)/blas_LINUX.a $(LAPACK)/lapack_LINUX.a
(b) LIBS = $(LAPACK)/lapack_LINUX.a $(LAPACK)/blas_LINUX.a
(c) gcc -Wall -O -o $@ project.o project.a $(LIBS)
问题:
仅某些例程的未定义引用可能是什么原因以及使出现顺序相关的原因是什么?