我在全新的 Cygwin 安装上编译 Fortran 代码时遇到了一些问题,我可以追溯到对英特尔svml
(短向量数学库)库中函数的未定义引用。
具体来说,我收到了表格错误
import_gamess.o:import_gamess.f90:(.text+0xb58b):
undefined reference to `vmldPow2'
并且该函数vmldPow2
是svml
库的一部分,如此处所示,我将其作为选项传递给我的 makefile 中的 gfortran
F90 = gfortran -m64 -msse2 -O3 -march=native -mtune=native -fopenmp \
-ffast-math -fassociative-math -freciprocal-math -ffinite-math-only \
-fno-signed-zeros -fno-trapping-math -msahf -mmovbe -mrecip \
-mveclibabi=svml -ftree-vectorize -fexternal-blas
-fblas-matmul-limit=50 -static
(我也在使用库lapack
和lblas
。)
该文件在我的笔记本电脑上编译得很好,在 Windows 7 上运行 Cygwin 1.7.17。(大约在 2013 年 4 月 18 日安装;gfortran 版本是 4.5.3。)我现在正在尝试在新桌面上复制安装,同样运行 Windows 7,并已安装 Cygwin 1.7.25。我在 32 位和 64 位安装(分别使用 gfortran 4.7.3 和 4.8.1 运行)以及在我的桌面上新安装 64 位 Cygwin 时都遇到了上述错误。我也没有在同一个桌面上启动 Linux 时遇到错误,目前我无法解决。
我很清楚svml
,在较新的 Cygwin 安装中,有 (a) 到 的链接断开,或 (b) 该库缺少部分。我已尽我所能广泛搜索恢复该库的方法,但它似乎是 GNU 编译器的固有部分。事实上,GNU 编译器是否放弃了对这个库的支持?如果没有,那么我推测我需要修复库或链接到它的文件。在那种情况下,这个库在哪里可用?我应该修复哪些文件以及如何修复?
不过,我承认,我很可能会找错树,如果是这样的话,我很乐意直截了当。我应该在哪里寻找?