![LAPACK make 失败:“目标‘znep.out’的配方失败”错误](https://linux22.com/image/129006/LAPACK%20make%20%E5%A4%B1%E8%B4%A5%EF%BC%9A%E2%80%9C%E7%9B%AE%E6%A0%87%E2%80%98znep.out%E2%80%99%E7%9A%84%E9%85%8D%E6%96%B9%E5%A4%B1%E8%B4%A5%E2%80%9D%E9%94%99%E8%AF%AF.png)
我的主要问题是出现此错误:
Makefile:463: recipe for target 'znep.out' failed
跑步后make
我试图安装气体保护焊(g 投影仪增强波方法,对于密度泛函理论模拟)在我的机器上。 ASE 正在工作,并且我已经安装了库,并按照指定编译BLAS库这里 但是当对提取的包执行“make”时,我总是得到相同的错误:
~/Downloads/lapack-3.8.0$ make
gfortran -O2 -frecursive -c -o zunt03.o zunt03.f
gfortran -o xeigtstz zchkee.o zbdt01.o zbdt02.o zbdt03.o zbdt05.o zchkbb.o zchkbd.o zchkbk.o zchkbl.o zchkec.o zchkgg.o zchkgk.o zchkgl.o zchkhb.o zchkhs.o zchkst.o zchkst2stg.o zchkhb2stg.o zckcsd.o zckglm.o zckgqr.o zckgsv.o zcklse.o zcsdts.o zdrges.o zdrgev.o zdrges3.o zdrgev3.o zdrgsx.o zdrgvx.o zdrvbd.o zdrves.o zdrvev.o zdrvsg.o zdrvsg2stg.o zdrvst.o zdrvst2stg.o zdrvsx.o zdrvvx.o zerrbd.o zerrec.o zerred.o zerrgg.o zerrhs.o zerrst.o zget02.o zget10.o zget22.o zget23.o zget24.o zget35.o zget36.o zget37.o zget38.o zget51.o zget52.o zget54.o zglmts.o zgqrts.o zgrqts.o zgsvts3.o zhbt21.o zhet21.o zhet22.o zhpt21.o zhst01.o zlarfy.o zlarhs.o zlatm4.o zlctes.o zlctsx.o zlsets.o zsbmv.o zsgt01.o zslect.o zstt21.o zstt22.o zunt01.o zunt03.o dlafts.o dlahd2.o dlasum.o dlatb9.o dstech.o dstect.o dsvdch.o dsvdct.o dsxt1.o alahdg.o alasum.o alasvm.o alareq.o ilaenv.o xerbla.o xlaenv.o chkxer.o ../../libtmglib.a ../../liblapack.a ../../librefblas.a
make[2]: Leaving directory '/home/joshua/Downloads/lapack-3.8.0/TESTING/EIG'
NEP: Testing Nonsymmetric Eigenvalue Problem routines
./EIG/xeigtstz < nep.in > znep.out 2>&1
Makefile:463: recipe for target 'znep.out' failed
make[1]: *** [znep.out] Error 139
make[1]: Leaving directory '/home/joshua/Downloads/lapack-3.8.0/TESTING'
Makefile:42: recipe for target 'lapack_testing' failed
make: *** [lapack_testing] Error 2
我使用了安装说明中建议的“Makefile”的默认配置。默认文件位于这里。
有什么建议吗?我使用的是 kubuntu 17.10
答案1
在参加了 HPC 讲座并做了一些研究后,我得到了答案。
看起来内核将一定量的内存与编译进程相关联。在某些情况下,当可能出现错误并且开始分配不必要的大量内存时,此功能会有所帮助。但有时,编译需要比平时更多的内存并开始出现错误。
然后,通过使用以下命令,它为编译设置无限量的内存。
ulimit -s unlimited
现在一切正常。
感谢@steeldriver 提出额外问题。
答案2
该ulimit -s unlimited
解决方法并没有完全解决我的问题。还有一个由 gcc 堆栈粉碎保护器引起的额外故障:
# cat TESTING/snep.out
*** stack smashing detected ***: <unknown> terminated
IOT Trap
Tests of the Nonsymmetric Eigenvalue Problem routines
要关闭堆栈粉碎保护器,请将 make.inc 中的 CFLAGS 行编辑为:
CFLAGS = -O3 -I$(TOPDIR)/INCLUDE -fno-stack-protector
然后make clean
和make all
。
gcc 堆栈粉碎检测器很可能正在检测真正的内存错误,一些评论在这个错误报告建议某些测试在索引某些数组时确实存在偏差为 1 的错误,因此可能值得尝试 lapack 的更高版本,其中包括该错误的修复,如果仍未修复,请向上游提出错误。
(顺便说一句,我还遇到了另一个构建错误:它无法使用并行 make 进行构建,即make -j16 all
,但可以使用标准的单进程make all
。)
答案3
我有同样的问题。我尝试了ulimit -s unlimited
解决方法,但是是在测试运行时,而不是在编译时。现在所有测试都通过了!