对 LAPACK 和 BLAS 子例程的未定义引用

2023-12-06

我试图了解 Fortran 中的 BLAS 和 LAPACK 如何工作等等,所以我编写了一个生成矩阵并将其反转的代码。

这是代码

program test
Implicit none
external ZGETRF
external ZGETRI
integer ::M  
complex*16,allocatable,dimension(:,:)::A
complex*16,allocatable,dimension(:)::WORK
integer,allocatable,dimension(:)::IPIV
integer i,j,info,error

Print*, 'Enter size of the matrix'
Read*, M 

Print*, 'Enter file of the matrix'
READ(*,*), A

OPEN(UNIT=10,FILE = '(/A/)' ,STATUS='OLD',ACTION='READ')

allocate(A(M,M),WORK(M),IPIV(M),stat=error)
    if (error.ne.0)then
        print *,"error:not enough memory"
        stop
    end if

 !definition of the test matrix A
  do i=1,M
  do j=1,M
    if(j.eq.i)then
       A(i,j)=(1,0)
    else 
       A(i,j)=0
    end if
 end do
end do  

 call ZGETRF(M,M,A,M,IPIV,info)
 if(info .eq. 0) then
   write(*,*)"succeded"
 else
  write(*,*)"failed"
 end if

 call ZGETRI(M,A,M,IPIV,WORK,M,info)
  if(info .eq. 0) then
   write(*,*)"succeded"
 else
  write(*,*)"failed"
 end if
 deallocate(A,IPIV,WORK,stat=error)
 if (error.ne.0)then
  print *,"error:fail to release"
  stop
 end if  
 close (10)    
end program test

矩阵 A 位于我正在调用的文件中,并且我还表示矩阵的大小 (M )。当我用 gfortran 复制它们时,我收到这些消息

/tmp/ccVkb1zY.o:功能中MAIN__': test.f03:(.text+0x751): undefined reference tozgetrf_' test.f03:(.text+0x85d): 对“zgetri_”的未定义引用 collect2:错误:ld 返回 1 退出状态

我已经安装了 BLAS 和 LAPACK,所以我不知道我是否以正确的方式调用库。

有什么建议吗?


看起来您可能没有链接到这些库。尝试:

gfortran -o test test.f03 -llapack -lblas

这会导致链接器(将所有程序部分连接在一起的程序;在 UNIX 上通常称为“ld”)在程序中包含 LAPACK 调用的库代码(或其动态链接)。

如果上面一行的结果是“cannot find -llapack”或类似的结果,则有两个常见问题:

  1. 库可以是“共享”(名称以“.so”结尾)或“静态”(名称以“.a”结尾);链接器将查找共享链接,因此如果您只有静态链接,则应在库链接之前添加“-static”:

    gfortran -o test test.f03 -static -llapack -lblas
    

    这也将使它寻找 BLAS 的静态版本;如果需要共享版本,请在“-lblas”前面添加“-shared”:

    gfortran -o test test.f03 -static -llapack -shared -lblas

    你可能会发现这一页有帮助。

  2. 链接器没有在正确的目录中查找库。您需要找到实际的库(称为“liblapack.so”或“liblapack.a”),并确保它所在的目录包含在链接器查找的目录中,例如让它也可以在“/mylibs/maths”中查找:

    gfortran -o test test.f03 -L/mylibs/maths -llapack -lblas
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对 LAPACK 和 BLAS 子例程的未定义引用 的相关文章

  • 可变格式

    我编写了一个程序来计算平方有限差分矩阵 您可以在其中输入行数 等于列数 gt 这存储在变量矩阵中 该程序运行良好 program fin diff matrix implicit none integer dimension allocat
  • 如何用好Fortran语句标签?

    我正在开发一个用 Fortran 95 编写的模型 我对此完全陌生 语句标签的概念似乎很奇怪 到目前为止我只找到了标签可以由作者任意决定的解释 通常以 10 为增量 除了更容易地找出语句的结尾位置之外 这些标签还有其他实际用途吗 以及关于如
  • Fortran PURE 函数可以使用全局参数吗?

    在我看来 Fortran 中所谓的纯函数对于那些使用函数式编程的人来说似乎不够纯粹 这是我的问题 假设我有以下代码 MODULE basics IMPLICIT NONE INTEGER PARAMETER dp kind 1 0d0 RE
  • Fortran if stop 需要 endif 吗?

    在 fortran 90 中 if stop 语句是否需要结束 endif example if foo eq 1 stop do some stuff do some stuff 是循环的一部分还是 stop 意味着程序结束时 endif
  • R 中矩阵的逆

    我想知道你推荐的计算矩阵逆的方法是什么 我找到的方法似乎并不令人满意 例如 gt c rbind c 1 1 4 c 1 4 1 gt c 1 2 1 1 00 0 25 2 0 25 1 00 gt inv c Error could n
  • 如何确保 numpy BLAS 库可用作动态加载库?

    The theano安装文档 http www deeplearning net software theano install html troubleshooting make sure you have a blas library指
  • 在一条语句中对多个变量进行相同的赋值

    有没有一种方法可以为不同的变量分配相同的值 而无需在单个语句中构造数组 例如 如果我有变量a b c d and e 我可以分配类似的东西吗 a b c d e 10 0 我知道我可以用一行来做 a 10 0 b 10 0 c 10 0 d
  • R:使用带有 .Call 和 C/C++ 包装器的 Fortran 子例程而不是 .Fortran 的优点?

    我有一个 R 包 它使用大量 Fortran 子例程来进行递归线性代数计算的嵌套循环 很大程度上依赖于 BLAS 和 LAPACK 例程 作为 Fortran 的接口 我使用 Fortran功能 我刚刚读过乔纳森卡拉汉的博客文章 http
  • f951 错误:无法识别的命令行选项

    我在linux上 正在编译以下内容 mpif90 shared source F90 object1 o object2 o L some path Qoption link rpath some path I some path lhdf
  • 使用 MacLaurin 展开的 Fortran Sine 函数的微小差异

    我正在用 Fortran 创建一个程序 它接受以弧度表示的 sin x 的 x 然后是要计算的项数 这是我的程序 Sine value using MacLaurin series program SineApprox implicit n
  • gfortran 支持尾调用消除吗?

    我编写了这个小程序来测试 gfortran 是否执行尾调用消除 program tailrec implicit none print tailrecsum 5 0 contains recursive function tailrecsu
  • 如何格式化整数以仅具有所需的大小?

    我一直在尝试以下代码 program hello write i9 10 end program hello 并改变格式字符串 尝试使写入输出的字符串大小恰好满足表示整数所需的大小 但到目前为止我无法管理它 如何在 Fortran 中编写
  • GO TO 语句 - Fortran 到 Matlab

    我一直在努力将此网格搜索代码从 Fortran 转换为 Matlab 但是我无法正确合并 GO TO 语句 我正在尝试使用 while 循环 但我认为我需要其他东西来结束搜索 任何帮助将不胜感激 vmax 1 0E 15 amax G 1
  • 在 C 中使用 lapack 计算矩阵的逆

    我希望能够计算一般的逆NxN使用 lapack 在 C C 中编写矩阵 我的理解是 在 lapack 中进行反转的方法是使用dgetri函数 但是 我无法弄清楚它的所有参数应该是什么 这是我的代码 void dgetri int N dou
  • Fortran90 中 BLAS 函数返回零

    我正在学习在Fortran90中使用BLAS 并使用子例程编写了一个简单的程序SAXPY https software intel com en us mkl developer reference fortran axpy和函数SNRM2
  • MATLAB 中最有效的矩阵求逆

    在 MATLAB 中计算某个方阵 A 的逆矩阵时 使用 Ai inv A should be the same as Ai A 1 MATLAB 通常会通知我这不是最有效的求逆方法 那么什么是更有效率的呢 如果我有一个方程系统 可能会使用
  • 在 VSCode Fortran 调试中检查从另一个模块导入的变量

    我正在调试一些包含许多 Fortran 模块的代码 其中一些模块彼此共享变量 不幸的是 带有 VScode 的 gdb 在调试时似乎无法检查导入的变量 目前 当我需要检查导入的变量时 唯一的方法是停止调试 并手动更改代码以包含等于导入变量的
  • 乔斯基与 ScaLAPACK

    我正在尝试通过进行 Cholesky 分解pdpotrf https software intel com en us node 521465MKL Intel 的库 它使用 ScaLAPACK 我正在读取主节点中的整个矩阵 然后像这样分配
  • 将结构化数据类型从 Fortran 传递到 C++ [重复]

    这个问题在这里已经有答案了 我在 Fortran 中有一个结构化类型 其中包含大量数据 包括指针 real 8 指针数据类型 我正在为某些 Fortran 例程开发 C API 我需要在对 Fortran 例程的调用之间保留该结构的内容 我
  • 在 Fortran 中按名称获取文件单元,反之亦然

    Fortran 90 有没有办法通过名称获取文件单元和通过单元号获取文件名 我知道这会很昂贵 但是我有很多文件名 我希望在创建它们后能够在子例程中重新访问它们 像这样的命令 inquire unit 12 opened openedq fi

随机推荐

  • 如何验证 Rails 中的重叠时间

    我有一个Event model具有form时间和to我的日程应用程序中的时间 我想在保存之前验证重叠时间 我的视图图像如下 Departure date Dec 31 2016 Day1 07 00 07 20 event1 10 30 1
  • 如何从服务获取数据到活动

    在我的应用程序中 我有一项活动和一项服务 该服务将广播从 GPS 数据收集的消息 Activity 应该接收广播消息并更新 UI 我的代码 public class LocationPollerDemo extends Activity p
  • Rspec 规格和 Rake 规格给出不同的结果

    这似乎是最常被问到的问题 我在两者中运行时都有一个应用程序rake spec and rspec输出似乎不同 当使用 rspec spec p 命令时 会显示 0 个失败消息 而当使用 rake spec 时 会显示很少的错误 当你跑步时
  • 使用 Rcpp 处理 R 中的矩阵是否有限制?

    我试图用 R 开发一个程序来估计 Spearman 与 Rcpp 的相关性 我做到了 但它只适用于向量范围小于 45 00 50 000 的矩阵 我不知道为什么 但它只适用于那个维度 我想这种类型的信息是有限制的 也许如果我像 data f
  • java.lang.ClassNotFoundException: org.springframework.faces.security.FaceletsAuthorizeTagHandler

    我尝试添加 Spring Security Facelets 标签库 因为它是这样写的here 我在web xml中添加
  • 将 PHP 网站与 Wordpress 用户身份验证集成

    我有一个现有的 Wordpress 网站 如果用户想要访问其他内容 完整故事 过去故事的存档等 则需要登录 我使用 PHP 和 MySQL 构建了一个新网站 该网站将托管在不同的服务器上 该网站的目标受众是访问前面提到的文章网站的同一受众
  • SKEmitterNode 粒子动作不工作 iOS9 Beta

    我正在 iOS9 Beta 4 中测试我的应用程序 发现许多曾经在 iOS8 中运行的代码不再按预期运行 另一个例子是 SpriteKit 的 SKEmitterNode articleAction 属性 以下代码在 iOS8 上有效 但在
  • Azure WebJobs NuGet 包错误

    我想知道是否有人在 Visual Studio 模板上的 Azure WebJobs 队列示例上遇到过运行错误 在我更新 NuGet 管理器上的所有包后 运行的示例会发出问题 这是错误消息 System InvalidOperationEx
  • 另一个字符串的子字符串会阻止父字符串被垃圾收集吗?

    String samplel ToBeGarbageCollected String sample2 samplel substring 0 1 samplel null 我知道子字符串内部会保留原始字符串的引用 但通过明确定义sample
  • 如何将更改从骨架子存储库拉入生产超级存储库

    我正在使用奥里莉亚骨架其中包含用于不同目的的各种项目设置 但这更多的是一个一般性问题 即如何使用 git 做一些事情 如下所述 我希望能够将 GitHub 框架存储库中发布的更新合并到我实际正在处理的项目中 你会怎么做 目前 我刚刚在 sc
  • 使用过滤器编辑 site_url

    使用 WordPress 调用site url 返回完整的站点 URL http www example com 我想做的是添加一些东西 add something here 在带有过滤器的 URL 末尾 我期待的结果是 http www
  • 仅将函数应用于具有可变位置的一列

    我有一堆不同的文件 所有文件都包含标题为 ID 的列 但不一定位于所有文件中的同一位置 我有一个函数想要应用于所有文件中的 ID 以将它们更改为 NEWID 我知道如果我传入 ID 的列号 我可以非常简单地做到这一点 假设它是 5 列文件中
  • 整数与长混淆

    我看到很多人相信以下观点 VBA 将所有整数值转换为 Long 类型 事实上 即使是MSDN 文章 says 然而 在最近的版本中 VBA 会将所有整数值转换为 Long 类型 即使它们被声明为 Integer 类型 这怎么可能 考虑这个简
  • 我如何知道方法调用可能引发哪些异常?

    有没有办法知道 在编码时 执行 python 代码时会出现哪些异常 我最终在 90 的情况下捕获了 Exception 基类 因为我不知道可能会抛出哪种异常类型 阅读文档并不总是有帮助 因为很多时候异常可以从深处传播 而且很多时候文档未更新
  • OpenCV v1/v2错误:该功能未实现

    我正在尝试让 OpenCV 在我的 Ubuntu 机器上使用 Python 我已经下载并安装了 OpenCV 但是当我尝试运行以下 python 代码时 应该从网络摄像头捕获图像并将其推送到屏幕 import cv cv NamedWind
  • 您可以将脚本分配给页面元素(形状等)吗?

    我想为学生制作一个交互式幻灯片 我想添加形状 因此当您单击形状时 它将运行 Apps Script 脚本 这在 Google 表格中是可能的 所以 我认为你也可以用幻灯片来做到这一点 没有办法运行容器绑定脚本通过点击 Google 幻灯片中
  • 使用新的亚马逊服务搜索亚马逊示例

    我找不到新的亚马逊服务的工作示例 或者至少在过去几年内 无论我在标题中输入什么内容 最接近的工作示例都会返回一个空项目 代码是 Amazon ProductAdvertisingAPI client AWSECommerceServiceP
  • 如何在 Three.js 中获取顶点的绝对位置?

    据我所知var point object geometry vertices i 将返回相对位置x y and z对象几何内部的点 如果对象被移动 旋转或缩放 如何获得绝对位置 您可以像这样获取顶点的世界位置 const vertex ne
  • 如何从互不关注的号码池中生成随机数

    我有一个数字池 例如 3 6 7 11 20 我需要每个数字在我的集合中出现 x 次 我的解决方案是创建一个包含两个整数 num numOfAppearnces 的类 我们称之为 元素 我在 arrayList 中创建了一个 元素 池 然后
  • 对 LAPACK 和 BLAS 子例程的未定义引用

    我试图了解 Fortran 中的 BLAS 和 LAPACK 如何工作等等 所以我编写了一个生成矩阵并将其反转的代码 这是代码 program test Implicit none external ZGETRF external ZGET