我在一个全新的Cygwin安装上编译Fortran代码时遇到了一些麻烦,我可以追溯到英特尔svml
(短矢量数学库)库中函数的未定义引用。
具体来说,我收到表格错误
import_gamess.o:import_gamess.f90:(.text+0xb58b):
undefined reference to `vmldPow2'
并且函数vmldPow2
是svml
库的一部分,如here所示,我将其作为选项传递给我的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-04-18安装; gfortran版本有4.5.3。)我现在正在尝试复制安装一个新的桌面,也运行Windows 7,并已安装Cygwin 1.7.25。我在32位和64位安装上都遇到了上述错误(分别使用gfortran 4.7.3和4.8.1运行),以及在我的桌面上安装了64位Cygwin。我也不在同一个桌面上的Linux启动时出现错误,这是我目前无法实现的。
我很清楚,在较新的Cygwin安装中,有(a)到svml
的链接断开,或者(b)缺少该库的部分。我已尽最大努力搜索恢复该库的方法,但它似乎是GNU编译器的固有部分。事实上,GNU编译器是否放弃了对该库的支持?如果没有,那么我猜测我需要修复库或链接到它的文件。在这种情况下,这个图书馆在哪里?我应该修复哪些文件以及如何修复?
答案 0 :(得分:1)
与gfortran 4.8.1的-mveclibabi
链接相对应的网站读取To use this option, both -ftree-vectorize and -funsafe-math-optimizations
have to be enabled, and an SVML or ACML ABI-compatible library must be
specified at link time.
:
4.7.1
版本4.7.2
和-funsafe-math-optimizations
同样适用。
我的猜测是你需要安装Intel MKL(并设置环境)并链接它。此外,您需要指定-mveclibabi=svml
。
或者,您可以删除gfortran
并使用{{1}}矢量化内在函数。