最近在指导一个研一的学生关于HF与DFT程序实现时候的区别与联系,就想着使用ergoSCF代码进行教学;程序给他后他在configure的时候出了问题,是关于lapack的。虽然说apt install一类的很好就可以解决,但是为了后面可以解决类似的问题,就以此为例说明了一下一般configure出问题后的解决步骤。
1. 首先 ./configure的时候,留意错误信息
checking for pthread_create in -lpthread... yes checking for dposv_... no checking for main in -lacml... no checking for main in -lmkl... no checking for main in -lessl... no checking for main in -latlas... no checking for dgemm_ in -lblas... no checking for main in -lmkl_lapack... no checking for dposv_ in -llapack... no checking for dgesv_ in -llapack... no configure: error: lapack required but not found
2. git grep -i dposv (查找报错的dsopv)
得知其在configure里面,可以将该部分提取出来
#ifdef __cplusplus extern "C" #endif char dposv_ (); int main () { return dposv_ (); ; return 0; }
3. 使用提取出来的测试程序放到 /home/masho2019/ergo-3.7/test-yingjin下面,命名为test.c
- a) 使用 gcc test.c -llapack -lblas 编译报错 原因为lapack没有加入搜索路径
- b) 使用 gcc test.c -L/home/masho2019/Downloads/lapack-3.8.0 -llapack -lblas 仍然报错,原因为缺少gfortran和lm库
- c) 使用gcc test.c -L/home/masho2019/Downloads/lapack-3.8.0 -llapack -lblas -lgfortran -lm 通过 (但是执行报错,怀疑虚拟机问题,暂时无视)
4. 使用额外的指令,重新./configure
CC=gcc LDFLAGS=-L/home/masho2019/Downloads/lapack-3.8.0 LIBS="-llapack -lblas -lgfortran -lm" ./configure configure通过
(J_Sagat)