LAPACK(1)——安装与测试

  LAPACKLAPACK,全称是Linear Algebra PACKage,一个高性能的线性代数的程序库,主页http://www.netlib.org/lapack/  。

1、安装

  LAPACK是用fortran写的,LAPACKE是它的C语言接口,先安装LAPACK,然后安装LAPACKE,那么在程序中可以直接调用C函数来实现需要的功能。

下面介绍这两个包的安装。

1)LAPACK的安装

  从官方网站上下载lapack包,目前最新版本是3.3.1。解压之后,查看一下README文件。在Linux上安装(我用的时Ubuntu10.04LTS),需要先配置好make.inc文件。

一些编译参数,

PLAT 表示使用的平台,会接在生成lib库的名字中,原本是 _LINUX, 我改成空的了。
FORTRAN 表示你使用的fortran编译器,根据自己安装的编译器来设置,我用的是 gfortran。
OPTS 表示 编译时的优化程度,设置为 -O2即可。
LOADER 设置成和FORTRAN 基本一样就可以了。

确定生成目标如下,

BLASLIB = http://www.cnblogs.com/libblas$(PLAT).a
LAPACKLIB
= liblapack$(PLAT).a
TMGLIB
= libtmglib$(PLAT).a
EIGSRCLIB
= libeigsrc$(PLAT).a
LINSRCLIB
= liblinsrc$(PLAT).a

  原来的这些库文件的名字前面没有lib的,这里加上。因为linux上库文件一般有前缀lib的,在链接的时候 -l后面带的是库的名字,那个时候是不加lib的。如果已经编译生成了这些库,可以重命名,而不用重新编译。

  在Makefile中,可以看到 all这一行有很多选项,我们make的时候,可以输入lib,那么就会只生成lib,如果直接make,会把所有的都编译,包括测试。还有一行lib, 列出了要生成的lib,注释掉的一行没有blaslib,如果已经安装了blaslib,那么就不用改了,没有安装的话,就把上一行注释掉,把这一行的注释去掉。或者自己手动加上。

2) LAPACKE的安装

  从网站上下载lapacke的压缩包,就是Standard C language APIs for LAPACK对应的压缩包,解压缩,查看README文件。

同样地,需要修改make.inc文件,

CC 表示使用的C程序编译器,改成 gcc,
LINKER 表示编译时要使用的连接器,前面几行注释提到了,
  之前编译lapack.a 和blas.a用的什么fortran编译器,这里就用什么。那么改成 gfortran.

LAPACKE 表示要生成的库文件的名字,类似的,改成liblapacke
.a
LAPACKE的编译需要之前生成的lapack库文件,所以LIBS这一行需要设置好。
LIBS
= $(LAPACK_PATH)/liblapack.a $(LAPACK_PATH)/libblas.a

其中LAPACK_PATH就是liblapack.a所在的目录了。

查看以下Makefile,没什么需要修改的,可以直接make,或者是make lapacke, 不让它编译test的内容。然后就生成liblapacke.a了。

2、使用示例

  因为生成的是库文件,所以可以把这些库文件放在系统的/usr/lib下面,这样链接这些库的时候可以不用给出路径了。

  先测试一下LAPACK。链接中有一个测试例子,http://blog.sciencenet.cn/home.php?mod=space&uid=271986&do=blog&id=280793。

使用下面的语句编译,

gfortran test.f90 -llapack -lblas

然后就生成了a.out,可以执行了。

  再测试LAPACKE。在lapacke的文件夹下面,有testing目录。我们近测试一个小的程序。新建一个目录,test_lapacke,把testing/include下面的test_utils.h文件拷出来,把utlis文件夹拷出来,把interface的一个.c文件拷出来,比如cbdsqr_1.c。还有lapacke文件夹下面的include里面的头文件。

那么按下面的命令编译,

gcc *.h cbdsqr_1.c utils/*.c -llapack -lblas -llapacke

编译成功,运行,输出PASSED,...。那么就表示程序运行正确了。

  这些只是测试,想要更方便的使用这些库,有两种方法,一是将那几个库文件放在/usr/lib下面,使用-l指定链接这些库,同时把lapacke/include下面的文件放到/usr/include下面,那么使用的时候,可以直接包含这些头文件。另一种方法就是把这些库文件,和那几个头文件放在自己的工程目录里。这两种方法差不多。

posted @ 2011-05-18 12:26  Frandy.CH  阅读(15738)  评论(0编辑  收藏  举报