首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编译lapacke示例代码?

编译lapacke示例代码?
EN

Stack Overflow用户
提问于 2014-03-21 01:59:05
回答 2查看 1.1K关注 0票数 0

我正在尝试编译这里找到的示例:

http://www.netlib.org/lapack/lapacke.html#_examples

具体地说,我正在尝试使用“调用CGEQRF和CBLAS”示例。代码如下:

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>
#include <lapacke.h>
#include <cblas.h>

int main (int argc, const char * argv[])
{
 lapack_complex_float *a,*tau,*r,one,zero;
 lapack_int info,m,n,lda;
 int i,j;
 float err=0.0;
 m = 10;   n = 5;   lda = m;
 one = lapack_make_complex_float(1.0,0.0);
 zero= lapack_make_complex_float(0.0,0.0);
 a = calloc(m*n,sizeof(lapack_complex_float));
 r = calloc(n*n,sizeof(lapack_complex_float));
 tau = calloc(m,sizeof(lapack_complex_float));
 for(j=0;j<n;j++)
    for(i=0;i<m;i++)
       a[i+j*m] = lapack_make_complex_float(i+1,j+1);
 info = LAPACKE_cgeqrf(LAPACK_COL_MAJOR,m,n,a,lda,tau);
 info = LAPACKE_cungqr(LAPACK_COL_MAJOR,m,n,n,a,lda,tau);
 for(j=0;j<n;j++)
    for(i=0;i<n;i++)
       r[i+j*n]=(i==j)?-one:zero;
 cblas_cgemm(CblasColMajor,CblasConjTrans,CblasNoTrans,
           n,n,m,&one,a,lda,a,lda,&one,r,n );
 for(i=0;i<n;i++)
    for(j=0;j<n;j++)
       err=MAX(err,cabs(r[i+j*n]));
 printf("error=%e\n",err);
 free(tau);
 free(r);
 free(a);
 return(info);
} 

如果我将文件另存为.cpp (也许这是我的第一个错误?)并使用

代码语言:javascript
复制
g++ lapacketest.cpp -llapack 

我得到以下编译错误:

3_20_2.cpp:14:7:错误:从不兼容类型'_Complex *‘a=_Complex(m*n,sizeof(Lapack_complex_float))赋值给'void float *’;^ 3_20_2.cpp:15:7:错误:从不兼容类型'void *‘r= calloc(n*n,sizeof(Lapack_complex_float))赋值给’void float *‘;^ 3_20_2.cpp:16:9:错误:从不兼容的类型'_Complex *‘赋值给'void float *’时,tau = calloc(m,sizeof(lapack_complex_float));^ ~~ 3_20_2.cpp:29:25:错误:使用了未声明的标识符‘_Complex’err=MAX(err,cab(ri+j*n));

我试着换成.c并和gcc一起编译,但是我得到了其他奇怪的错误。有什么想法吗?我正在慢慢地尝试从Matlab过渡到c++进行科学计算,到目前为止,这是一个令人头疼的问题。

EN

回答 2

Stack Overflow用户

发布于 2014-03-21 02:02:56

看起来calloc(m*n,sizeof(lapack_complex_float));没有返回指向lapack_complex_float类型的对象的指针。

票数 0
EN

Stack Overflow用户

发布于 2018-08-25 17:11:00

我可以编译它,但您必须更改代码行

代码语言:javascript
复制
#include <lapacke.h> 

#include <lapacke_utils.h>

你可以在http://www.netlib.org/lapack/explore-html/da/d8e/lapacke__utils_8h_source.html找到。在下载它并将其放入与您的程序相同的目录之后,或者在编译期间使用标记-L -I在您的系统上定位该库。

要编译,请使用:

代码语言:javascript
复制
gcc CGEQRF_CUNGQR.c -llapacke -lblas -lm
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22541401

复制
相关文章

相似问题

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