這次的專案是希望保持純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)
多谢,好笔记,收藏了!
回覆刪除