使用gfortran链接Intel MKL中的LAPACK

5

我有一个问题,无法将LAPACK链接到Fortran示例程序。以下是示例程序example.f95:

Program LinearEquations
! solving the matrix equation A*x=b using LAPACK
Implicit none

! declarations
double precision :: A(3,3), b(3)
integer :: i, pivot(3), ok

! matrix A
A(1,:)=(/3, 1, 3/)
A(2,:)=(/1, 5, 9/)
A(3,:)=(/2, 6, 5/)

! vector b
b(:)=(/-1, 3, -3/)
!b(:)=(/2, 2, 9/)

! find the solution using the LAPACK routine DGESV
call DGESV(3, 1, A, 3, pivot, b, 3, ok)

! print the solution x
do i=1, 3
  write(*,9) i, b(i)
end do  

9  format('x[', i1, ']= ', f5.2)  
end program LinearEquations

我已经在这里安装了库:

/opt/intel/compilers_and_libraries_2017.4.196/linux/mkl/lib/intel64_lin/libmkl_lapack95_ilp64.a

我正在使用gfortran编译程序:

gfortran -o example example.f95 -L/opt/intel/compilers_and_libraries_2017.4.196/linux/mkl/lib/intel64_lin/libmkl_lapack95_ilp64.a

然而它报错了。

 /tmp/ccWtxMFP.o: In function `MAIN__':
 example.f95:(.text+0xf0): undefined reference to `dgesv_'
 collect2: error: ld returned 1 exit status

请问有人能帮我解决这个问题吗?非常感谢


1
您似乎正在使用默认的32位整数,而指定了需要64位整数的库。请参考Intel mkl链接顾问小程序以获取完整的所需库集合。 - tim18
我尝试了ia32,但它也没有起作用。 - Vlada
1
正如你所发现的那样,阅读文档比通过试错更容易。 - tim18
2个回答

5

链接有两种类型:

  • 静态链接: 将程序与静态库进行链接。

    例如:gfortran program.f90 /path-to-lib/libmy.a -o program.x

  • 动态链接: 将程序与共享库进行链接:

    例如:gfortran program.f90 -L/path-to-lib -lmy -o program.x

    这将使您的程序与 libmy.so 进行链接。

根据 MKL Advisor,您应该使用以下命令:

-Wl,--start-group ${MKLROOT}/lib/intel64/libmkl_gf_lp64.a ${MKLROOT}/lib/intel64/libmkl_sequential.a ${MKLROOT}/lib/intel64/libmkl_core.a -Wl,--end-group -lpthread -lm -ldl

进行静态链接,或者使用以下命令:

-L${MKLROOT}/lib/intel64 -Wl,--no-as-needed -lmkl_gf_lp64 -lmkl_sequential -lmkl_core -lpthread -lm -ldl

进行动态链接。

其中${MKLROOT}是 MKL 的路径。


是的,现在它可以工作了,我之前链接错误了。当我使用了你的建议后,一切都正常了。非常感谢你。 - Vlada
@Vlada 不仅链接错误!你使用了 ilp64,但 lp64 才是正确的!请看 tim18 的评论。 - Vladimir F Героям слава

0

欢迎来到Stack Overflow!虽然链接是分享知识的好方法,但如果它们在未来失效了,它们就不会真正回答问题。在您的答案中添加回答问题的链接的基本内容。如果内容过于复杂或太大而无法适应此处,请描述所提出解决方案的一般思路。请记住始终保留对原始解决方案网站的链接引用。请参见:如何撰写良好的答案? - sɐunıɔןɐqɐp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接