对 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 子例程的未定义引用 的相关文章

  • 纯 Fortran 过程中的 I/O

    我正在尝试将错误检查合并到我正在编写的纯过程中 我想要这样的东西 pure real function func1 output unit a implicit none integer a output unit if a lt 0 th
  • 如何在 conda 中静音或抑制 gfortran (或 clang?)后端?

    我一直致力于构建一个非常特殊的 conda 环境 专为python and R与串扰使用rpy2 我想出的方法可以安装正确的R包如下 install main environment sh now date T echo Start Tim
  • 尝试读取名单后返回的状态不是预期的

    我想从文件中读取名单 但在名单不存在的情况下实现捕获选项 从我读到的here http msg ucsf edu local programs IBM Compilers Fortran html pgs lr76 htm我期望状态为 84
  • R:使用带有 .Call 和 C/C++ 包装器的 Fortran 子例程而不是 .Fortran 的优点?

    我有一个 R 包 它使用大量 Fortran 子例程来进行递归线性代数计算的嵌套循环 很大程度上依赖于 BLAS 和 LAPACK 例程 作为 Fortran 的接口 我使用 Fortran功能 我刚刚读过乔纳森卡拉汉的博客文章 http
  • Fortran gfortran linux 中的“分段错误(核心转储)”错误

    我正在创建一个程序 该程序将分析目录中的文件 fits 然后它将在另一个目录中创建另一个文件 txt 它只是一个转换器 当我尝试执行该程序 编译正常 时 它给了我一条错误消息 程序收到信号 SIGSEGV 分段错误 无效的内存引用 此错误的
  • 在 C 中使用 lapack 计算矩阵的逆

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

    我必须设计并实现一个 Fortran 例程来确定方格上簇的大小 并且递归地编写子例程似乎非常方便 然而 每当我的晶格大小超过某个值 大约 200 边 时 子例程就会始终出现段错误 这是我的集群检测例程 RECURSIVE SUBROUTIN
  • Fortran 内部计时例程,哪个更好? cpu_time 或 system_clock

    当对 FORTRAN 程序进行计时时 我通常只使用命令call cpu time t 然后我偶然发现call system clock count count rate count max 这似乎做了同样的事情 然而 在更加困难的庄园里 我
  • 带有过程参数的通用类型绑定过程

    我正在尝试编写一个通用的类型绑定过程 它将不同的回调函数作为参数 当编译以下代码 使用 ifort 12 1 3 时 我收到以下警告 module test type a type contains procedure t s gt at
  • 更快地评估从右到左的矩阵乘法

    我注意到以二次形式评估矩阵运算右到左明显快于左到右在 R 中 取决于括号的放置方式 显然它们都执行相同的计算量 我想知道为什么会这样 这与内存分配有什么关系吗 A 5000 5000 B 5000 2 A matrix runif 5000
  • 如何在fortran 90中生成[0,5]范围内的整数随机数?

    我对 Fortran 编程有点陌生 任何人都可以帮我解决问题吗 我在生成整数随机数时遇到问题 在 Fortran 随机数范围 0 5 中使用 random seed 和 rand 为了支持answer https stackoverflow
  • Fortran 正在读取超出结束文件记录的内容

    我正在尝试从文件中读取一些数据 而结束文件记录检测对于停止读取非常重要 但是 根据用于读取数据的数组的数组维度 我无法正确检测结束文件记录 并且我的 Fortran 程序停止 程序如下 integer dimension 3 x line
  • 在 VSCode Fortran 调试中检查从另一个模块导入的变量

    我正在调试一些包含许多 Fortran 模块的代码 其中一些模块彼此共享变量 不幸的是 带有 VScode 的 gdb 在调试时似乎无法检查导入的变量 目前 当我需要检查导入的变量时 唯一的方法是停止调试 并手动更改代码以包含等于导入变量的
  • 带有数字/标签的 Fortran IF 语句而不是另一个语句

    这段 Fortran 代码的含义是什么 IF J1 3 20 20 21 21 J1 J1 3 20 IF J2 3 22 22 23 23 J2 J2 3 22 CONTINUE 我在旧项目中看到过 我不知道这个带有数字 标签 的 IF
  • 如何在 Sublime Text 2 的 OSX 终端中显示构建结果

    我刚刚从 TextMate 切换到 Sublime Text 2 我非常喜欢它 让我困扰的一件事是默认的构建结果显示在 ST2 的底部 我的程序产生一些很长的结果 显示它的理想方式 如在 TM2 中 是并排查看它们 如何在 Mac 操作系统
  • 在 Fortran 中按名称获取文件单元,反之亦然

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

    我正在寻找一个用于处理 Fortran 90 95 中稀疏矩阵的库 我只需要非常基本的运算 例如矩阵向量乘法 你建议我用什么 我搜索了一下 找到了 BLAS 的一个扩展 称为 稀疏 blas 记录在blast技术论坛规范的第 3 章中 ht
  • Fortran 中的函数和子例程有什么区别?

    我的印象是 Fortran 中子例程和函数之间的主要区别在于函数返回值 而子例程更改作为参数传递的部分或全部值 但后来我了解到您也可以修改作为参数传递给函数的变量 我很困惑 找不到很好的参考来了解它们之间的差异 那么 这两种结构之间有什么区
  • 如何使用 BLAS 执行向量矩阵乘法?

    BLAS 定义了 GEMV 矩阵向量乘法 2 级运算 如何使用 BLAS 库执行向量矩阵乘法 这可能很明显 但我不知道如何使用 BLAS 运算进行此乘法 我原本期望进行 GEVM 手术 M x N 矩阵与 N x 1 向量的矩阵向量乘法将得
  • openmpi 忽略错误:无法识别 mca 接口

    今天早上 我升级了 gfortran 从 4 7 到 6 1 0 和 OpenMPI 从 1 10 到 2 0 1 编译器 我写了这个简单的程序 program main use mpi f08 implicit none

随机推荐

  • 如何验证 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