Компиляция примера кода в lapacke?

0

Я пытаюсь скомпилировать приведенные здесь примеры:

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

В частности, я пытаюсь заставить пример "Calling CGEQRF и CBLAS" работать. Код выглядит так:

#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 (возможно, это моя первая ошибка?) И скомпилировать с помощью

g++ lapacketest.cpp -llapack 

Я получаю следующие ошибки компиляции:

3_20_2.cpp: 14: 7: ошибка: присвоение '_Complex float *' из несовместимого типа 'void *' a = calloc (m * n, sizeof (lapack_complex_float)); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 3_20_2.cpp: 15: 7: ошибка: присвоение '_Complex float *' из несовместимого типа 'void *' r = calloc (n * n, sizeof (lapack_complex_float)); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 3_20_2.cpp: 16: 9: ошибка: присвоение "_Complex float *" из несовместимого типа "void *" tau = calloc (m, sizeof (lapack_complex_float)); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 3_20_2.cpp: 29: 25: ошибка: используйте необъявленного идентификатора "кабины" err = MAX (err, cabs (r [i + j * n]));

Я попытался перейти на.c и скомпилировать с помощью gcc, но у меня появились другие странные ошибки. Есть предположения? Я медленно пытаюсь перейти от Matlab к c++ для научных вычислений, и пока это просто гигантская головная боль.

Теги:
lapack

1 ответ

0

Он выглядит как calloc(m*n,sizeof(lapack_complex_float)); не возвращает указатель на объект типа lapack_complex_float.

  • 0
    Хорошо. Что мне делать с этим ...?
  • 0
    Можете ли вы подтвердить, что это так? А что на самом деле возвращает calloc ? Похоже, это возвращение void которая ничто. Вам нужно что-то, чтобы вернуть указатель на lapack_complex_float .
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню