问题
为Lapack添加外部接口后,与消息链接时代码失败
Undefined symbols for architecture x86_64:
"___msolutionsvd_MOD_dgesvd", referenced from:
___msolutionsvd_MOD_svd_pseudoinverse_solve_sub in m-solution-svd.o
似乎链接器正在寻找我的安装DGESVD.mod
中未包含的文件。openblas
代码
这有效
模块module mSolutionSVD
使用了声明
external DGESVD
指向 BLAS 例程并contains
subroutine svd_pseudoinverse_solve_sub
调用DGESVD
.
这失败了
声明被显式接口替换
interface lapack
module subroutine DGESVD ( JOBU, JOBVT, M, N, A, LDA, S, U, LDU, VT, LDVT, WORK, LWORK, INFO )
character ( kind = kindA, len = 1 ), intent ( in ) :: JOBU, JOBVT
integer ( kind = ip ), intent ( in ) :: M, N, LDA, LDU, LWORK
integer ( kind = ip ), intent ( out ) :: INFO
real ( kind = rp ), intent ( out ) :: S ( : ), U ( : , : ), VT ( : , : ), WORK ( : )
real ( kind = rp ), intent ( inout ) :: A ( : , : )
end subroutine DGESVD
end interface lapack
背景
kind 语句来自具有以下语句的例程:
use, intrinsic :: iso_fortran_env, only : INT8, REAL64
integer, parameter :: kindA = kind ( 'A' )
integer, parameter :: rp = selected_real_kind ( REAL64 )
integer, parameter :: ip = selected_int_kind ( INT64 )
问题
我们可以为 Lapack 使用外部接口而无需重新编译 Lapack 吗?