首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(%1)处的“‘dlantr”不是函数

(%1)处的“‘dlantr”不是函数
EN

Stack Overflow用户
提问于 2021-03-01 23:24:44
回答 1查看 45关注 0票数 2

我在尝试使用Lapack函数时遇到了一个奇怪的问题

计算三角矩阵的范数。基本上,我有一个可以工作的单文件程序

和一些其他的Lapack过程,现在我想把它分成几个模块。

在一个这样的模块中以子例程结束。但是,尝试使用gfortran-10编译上述模块(通过MPI包装器编译器,因为其中也有一些MPI ),如下所示

代码语言:javascript
复制
mpifort -o kde.o -c kde.f90

导致错误:

代码语言:javascript
复制
‘dlantr’ at (1) is not a function

这很奇怪,因为

其他Lapack过程(在我的例子中

)在同一个子例程中

同一模块中的一个简单的子例程,如

代码语言:javascript
复制
subroutine foo(a)
    real(kind=DP), intent(in) :: a(2,2)
    real(kind=DP) :: tmp, dlantr
    print*, dlantr('F','L','N',2,2,a,2,tmp)**2
end subroutine

从主程序调用时也可以正常工作。在出现问题的子例程中,以与上面相同的方式在原始程序中声明它,即

可以找到有问题的代码

这里

..。是什么导致了这种行为,以及如何修复它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-01 23:47:57

我最初的回答是错误的。这可能是一个编译器错误

https://gcc.gnu.org/bugzilla/show

_

bug.cgi?id=87127

..。尽管如此,这种显式使用

属性使错误消失:

代码语言:javascript
复制
real(kind=DP), external :: dlantr

此错误的MWE为:

代码语言:javascript
复制
subroutine sub
    integer :: d
    real :: f
    real :: a
    
    associate (c => d)
        a = f()
    end associate
end subroutine sub
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66424857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档