2012年12月15日

Lapacke in Ubuntu

這次的專案是希望保持純C的,又要用到大量的數值運算,而Lapack把C界面直接包進安裝包了,沒理由不用啦。

首先下載現行版lapack-3.4.2.tgz,在執行以下指令

# 解壓縮檔案並移入

tar -zxf lapack-3.4.2.tgz
cd lapack-3.4.2

# 複製出新的make.inc並修改要使用的Fortran編譯器,Ubuntu可使用預設的gfortran,無須修改
cp make.inc.example make.inc

# 沒有gfortran的話要安裝
sudo apt-get install gfortran

# 編譯靜態庫,直接下make指令會連測試都一起編譯,不過大多是炫耀速度的測試,沒必要
make blaslib
make lapacklib

# 移到lapacke並編譯C界面的靜態酷
cd lapacke
make


其實編譯的步驟到這邊就已經完成了,接下來是使用方法以lapack底下的example為例

#移到example並編譯
cd lapacke
make

如果你看到一堆數字在終端機亂閃就表示你成功囉,不過要是你打開Makefile會發現還是要用gfortran當linker,解決方法是將libgfortran.a聯結到gcc中,就可以當成一般的C靜態库使用了,檔案結構與Makefile如下

\lapacke
    \include
        ...
    \library
        librefblas.a
        liblapack.a
        liblapacke.a
    example_DGESV_rowmajor.c
    example_ZGESV_rowmajor.c
    Makefile


#Makefile

CC = gcc

INCLUDE_PATH = "./include"
LIBRARY_PATH = "./library"
LIB = -llapacke -llapack -lrefblas -lgfortran

all: example_DGESV_rowmajor example_ZGESV_rowmajor


example_DGESV_rowmajor: example_DGESV_rowmajor.o
$(CC) -o example_DGESV_rowmajor example_DGESV_rowmajor.o -I$(INCLUDE_PATH) -L$(LIBRARY_PATH) $(LIB)

example_DGESV_rowmajor.o: example_DGESV_rowmajor.c
$(CC) -c example_DGESV_rowmajor.c -I$(INCLUDE_PATH)


example_ZGESV_rowmajor: example_ZGESV_rowmajor.o
$(CC) -o example_ZGESV_rowmajor example_ZGESV_rowmajor.o -I$(INCLUDE_PATH) -L$(LIBRARY_PATH) $(LIB)

example_ZGESV_rowmajor.o: example_ZGESV_rowmajor.c
$(CC) -c example_ZGESV_rowmajor.c -I$(INCLUDE_PATH)

1 則留言: