lapack++与sba的编译问题

2023-11-11

最近在研究老外写的sba的程序,从http://users.ics.forth.gr/~lourakis/sba/下载的sba程序是源代码,并没有编译,按照http://blog.csdn.net/royalvane/article/details/8125388的方法,下载http://www.netlib.org/clapack/CLAPACK3-Windows.zip这个文件,并在vc6.0下编译是没有问题的,编译完成后,在文件中会找到clapack.lib ,blas.lib,libF77.lib,libI77.lib这四个库,将它们复制到sba目录下就能编译成功,sba程序运行是输命令行参数的,详细用法可以参照demo文件夹下的readme文档。sba程序是用c语言写的,有时候我们想要在c++中使用sba程序,我的做法是把源程序.c改成.cpp,然后将里面的分配动态数组的函数修改一下(动态数组的size很关键,一定要看清楚,不要设置错了),属性中包含的库目录也要设置好,这时候编译会出现很多问题,比如什么库冲突,还有转换到EOFF期间文件出错(这个问题可以将vs2010打上sp1补丁就可以解决),还有最大的问题就是出现了一堆没有定义的外部命令,这是因为在c++中调用c中编译的库会出现这样的问题,用extern “C”,如下:

#ifdef __cplusplus
extern "C" {
#endif
/* declarations of LAPACK routines employed */

/* QR decomposition */
extern int F77_FUNC(dgeqrf)(int *m, int *n, double *a, int *lda, double *tau, double *work, int *lwork, int *info);
extern int F77_FUNC(dorgqr)(int *m, int *n, int *k, double *a, int *lda, double *tau, double *work, int *lwork, int *info);

/* solution of triangular system */
extern int F77_FUNC(dtrtrs)(char *uplo, char *trans, char *diag, int *n, int *nrhs, double *a, int *lda, double *b, int *ldb, int *info);

/* Cholesky decomposition, linear system solution and matrix inversion */
extern int F77_FUNC(dpotf2)(char *uplo, int *n, double *a, int *lda, int *info); /* unblocked Cholesky */
extern int F77_FUNC(dpotrf)(char *uplo, int *n, double *a, int *lda, int *info); /* block version of dpotf2 */
extern int F77_FUNC(dpotrs)(char *uplo, int *n, int *nrhs, double *a, int *lda, double *b, int *ldb, int *info);
extern int F77_FUNC(dpotri)(char *uplo, int *n, double *a, int *lda, int *info);

/* LU decomposition, linear system solution and matrix inversion */
extern int F77_FUNC(dgetrf)(int *m, int *n, double *a, int *lda, int *ipiv, int *info); /* blocked LU */
extern int F77_FUNC(dgetf2)(int *m, int *n, double *a, int *lda, int *ipiv, int *info); /* unblocked LU */
extern int F77_FUNC(dgetrs)(char *trans, int *n, int *nrhs, double *a, int *lda, int *ipiv, double *b, int *ldb, int *info);
extern int F77_FUNC(dgetri)(int *n, double *a, int *lda, int *ipiv, double *work, int *lwork, int *info);

/* SVD */
extern int F77_FUNC(dgesvd)(char *jobu, char *jobvt, int *m, int *n,
           double *a, int *lda, double *s, double *u, int *ldu,
           double *vt, int *ldvt, double *work, int *lwork,
           int *info);

/* lapack 3.0 routine, faster than dgesvd() */
extern int F77_FUNC(dgesdd)(char *jobz, int *m, int *n, double *a, int *lda,
           double *s, double *u, int *ldu, double *vt, int *ldvt,
           double *work, int *lwork, int *iwork, int *info);


/* Bunch-Kaufman factorization of a real symmetric matrix A, solution of linear systems and matrix inverse */
extern int F77_FUNC(dsytrf)(char *uplo, int *n, double *a, int *lda, int *ipiv, double *work, int *lwork, int *info); /* blocked ver. */
extern int F77_FUNC(dsytrs)(char *uplo, int *n, int *nrhs, double *a, int *lda, int *ipiv, double *b, int *ldb, int *info);
extern int F77_FUNC(dsytri)(char *uplo, int *n, double *a, int *lda, int *ipiv, double *work, int *info);

#ifdef __cplusplus
}
#endif

这时候编译就能通过,并且此程序得到的结果与c中计算的结果一致。

如果有人想用lapack++,那可以在http://sourceforge.jp/projects/sfnet_lapackpp/下载,然后这个程序的编译又是一个难题,不过在程序根目录下有readme文件,仔细阅读,发现需要准备两个外部库文件,但是可以在http://sourceforge.jp/projects/sfnet_lapackpp/下载这个lapackpp-2.5.1-setup.exe程序并安装,这时候再去编译lapackpp源代码,设置好库目录就可以编译通过,关于库目录的问题,两个静态库在你刚刚安装的lapackpp-2.5.1-setup.exe目录下,我的是C:\Program Files\lapackpp\lib,还有一个动态库,在C:\Windows目录下,设置好后就可以编译成功了。


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

lapack++与sba的编译问题 的相关文章

随机推荐

  • wx原生微信小程序入门常用总结

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 定义值和修改值 1 定义值 2 修改值 1 代码 2 代码说明 3 注意点 二 点击事件 三 微信小程序的数据缓存 以setStorage为例使用 0 s
  • java linux class_Linux 下运行 class 文件

    1 基本命令 java cp searchDir classFile cp searchDir 指定从该目录搜索 class 文件 classFile 类路径 不包含 class 后缀 2 没有包结构的class文件 2 1 文件所在目录结
  • mybatis-plus中的条件构造器wrapper

    接口方法的参数中 会出现各种 Wrapper 比如 queryWrapper updateWrapper 等 Wrapper 的作用就是用于定义各种各样的条件 where 所以不管是查询 更新 删除都会用到 Wrapper 如 QueryW
  • el-date-picker怎样获取选择的时间范围值并判断是否大于7天

    场景 SpringBoot Vue Echarts实现选择时间范围内数据加载显示柱状图 SpringBoot Vue Echarts实现选择时间范围内数据加载显示柱状图 BADAO LIUMANG QIZHI的博客 CSDN博客 在上面需要
  • Linux网络编程:基础知识入门学习笔记汇总

    学习Linux的网络编程原则上基于 Linux的系统编程 和 Linux基础的Shell编程 第十章 除此之外还包含了计算机网络的知识 Linux基础shell编程 gt Linux 系统编程 gt Linux 网络编程 来源 黑马程序员
  • Hostmonitor邮件告警

    Hostmonitor可以通过邮件告警 打开Hostmonitor应用 1 点击Options 2 选择Mailer settings 3 Address输入框中填写网易邮箱的SMTP服务器地址 Port 输入框输入网易邮箱服务器端口 Au
  • 报`Uncaught (in promise)`错误解决办法

    使用了promise 但是在使用的过程中报Uncaught in promise 错误 第一次遇到这种错误 所以在此记录下 方便以后解决问题 getImage function url return new Promise resolve
  • getnameinfo failed

    在虚拟机vmware中用netstat 查看网络状态出现一行 getnameinfo failed 可能的一个原因 虚拟机使用NAT方式链接网络 解决方法 使用桥接方式即可
  • 【从零开始学c++】——类与对象(二)

    类与对象 1 构造函数 1 1构造函数的定义 1 2构造函数的特性 2 析构函数 2 1概念 2 2 特性 3 拷贝构造函数 3 1 概念 3 2 拷贝构造函数的特性 4 赋值运算符的重载 4 1 概念 4 2 实现日期类的运算符 4 2
  • 【Java基础知识 14】java动态代理原理

    Java学习路线思维导图 Java学习路线总结 思维导图篇 Java学习路线配套文章 搬砖工逆袭Java架构师 哪吒社区入口 哪吒社区 简介 Java领域优质创作者 CSDN哪吒公众号作者 Java架构师奋斗者 扫描主页左侧二维码 加入群聊
  • cumsum() R函数:用于产生随机变量的累积和

    gt 1 4 1 1 2 3 4 gt cumsum 1 4 1 1 3 6 10 函数介绍 Returns a vector whose elements are the cumulative sums cumsum 函数 Cumulat
  • python中import re_彻底搞懂Python 中的 import 与 from import

    对不少 Python 初学者来说 Python 导入其他模块的方式让他们很难理解 什么时候用import xxx 什么时候用from xxx import yyy 什么时候用from xxx yyy import zzz 什么时候用from
  • 又搞定一块屏幕 micropython 驱动 sharp memory lcd

    先来学学C是怎么写的 核心代码 void lcd refresh void uint16 t i 0 ln 0 SCS 1 delay us 5 write byte 0x80 for ln 0 ln lt 128 ln write byt
  • AI人流量统计算法,让公众场所人群管控更简单

    为强化疫情防控 公众场所时常需要调整人数上限 高效快捷限制人群聚集 减少疫情传播风险 以往的方式是投入大量人力在出入口设置门岗 对出入人员进行现场管理 统计及控制进出人流数量 基于区域人流量统计技术模型 快瞳科技 人流量统计检测算法 为疫情
  • 788. 旋转数字

    788 旋转数字 我们称一个数 X 为好数 如果它的每位数字逐个地被旋转 180 度后 我们仍可以得到一个有效的 且和 X 不同的数 要求每位数字都要被旋转 如果一个数的每位数字被旋转以后仍然还是一个数字 则这个数是有效的 0 1 和 8
  • 田志刚:企业知识管理的知识传播

    知识管理本身的知识传播是知识管理在国内发展的一个重要课题 虽然我们都认为知识管理有价值 但更多的人不知道 所以如何让更多的人知道KM 理解并知道如何实践就成为知识管理的知识传播的重要内容 知识管理的知识传播可以分两个层面 一个层面是对于社会
  • VMware Workstation Pro 16 安装win7

    本文使用U盘工具创建 至于为什么安装win7 毕竟很多游戏在win10已经没法玩了 1 创建虚拟机 典型创建即可 2 添加硬盘 SCSI类型 使用物理磁盘 物理驱动2 使用整个磁盘 这里的驱动2就是U盘 创建完成 这时候应该是正在使用该设备
  • python高级知识之常用的魔术方法

    文章目录 1 init 魔术方法 2 new 魔术方法 3 str 魔术方法 4 del 魔术方法 5 call 魔术方法 6 len 魔术方法 7 eq 魔术方法 8 hash 魔术方法 9 getitem 魔术方法 10 setitem
  • 解决 vs code 搜索中文结果异常的问题

    文章目录 一 引言 二 解决 一 引言 最近在工作中遇到了一个很诡异的问题 在使用 vs code 过程中 发现 ctrl f 搜索一个项目文件夹中的结果的时候 搜索数字没有问题 能出来结果 但是搜索中文就会出不来结果 明明确认是有相关中文
  • lapack++与sba的编译问题

    最近在研究老外写的sba的程序 从http users ics forth gr lourakis sba 下载的sba程序是源代码 并没有编译 按照http blog csdn net royalvane article details