本文介绍了使用CLAPACK未定义的引用错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图让clapack在ubuntu 14上工作...但它一直告诉我未定义的引用ssyev _(实际上它发生在clapack.h中的任何c函数)



我刚刚使用cmdg ++ lineartest3.cpp -o linear3



我很肯定我遵循下面的说明。 / p>


  • cd CLAPACK-3.2.1

  • cp make.inc.example make.inc

  • make f2clib

  • make blaslib

  • make(需要一段时间)

  • sudo cp INCLUDE / f2c.h / usr / include

  • sudo cp INCLUDE / clapack.h / usr / include

  • usr / include / f2c.h

  • sudo chmod 644 /usr/include/clapack.h **


$ b b

和我的小代码。

  #include< iostream> 
using namespace std;
externC{
#includef2c.h
#includeclapack.h
}

$ b int ()
{
int i,j;
float * A = new float [16];
A [0] = 1; A [1] = 1; A [2] = 1; A [3] = 1;
A [4] = 1; A [5] = 2; A [6] = 3; A [7] = 4;
A [8] = 1; A [9] = 3; A [10] = 6; A [11] = 10;
A [12] = 1; A [13] = 4; A [14] = 10; A [15] = 20;
cout< A =(​​;
for(i = 0; i
//使用调用引用参数,在另一个适配Fortran
int n = 4;
char jobz ='V';
char uplo ='U';
integer N = n;
integer LDA = n;
float * eigvalue = new float [n];
int worksize; //必须有lwork> = 3n-1,因此n ^ 2对于n = 2不够大!
if(n == 2)worksize = 5; else worksize = n * n;
float * work;
work = new float [worksize];
integer lwork = worksize;
integer info; // exit status

ssyev _(& jobz,& uplo,& N,A,& LDA,eigvalue,work,& lwork,& info);

cout<< info =<<信息< endl;
if(info> = 0)

{

cout< Eigenvalues =(



cout<< 正确答案在GvL:(.0380,.4​​538,2.2034(typo?),26.3047)

< endl;

//特征向量存储在A中(重写原始矩阵):

//特征向量= A的列A

= 0; i
{

cout< 特征向量<< i<< =(;
for(j = 0; j cout }
}
delete [] A;
delete [] eigvalue; // be a good boy scout
delete [] work;
return 0;

}

Plz帮助..

问题解决..我不得不说初学者的文档是可怕的...



blas_LINUX.a lapack_LINUX.a F2CLIBS / libf2c.a到/ usr / local / lib,并分别重命名为libblas.a liblapack.a libf2c.a。



更改权限chmod 777 libblas.a liblapack.a libf2c.a



写一个test.cpp并调用g ++ test.cpp -llapack -lblas -lf2c -o test


I am trying to get clapack working on ubuntu 14... But it keeps telling me undefined reference to "ssyev_"(actually it happens to any of those c functions in "clapack.h")

I just used the cmd "g++ lineartest3.cpp -o linear3"

I am pretty sure i followed the instructions shown below.

  • cd CLAPACK-3.2.1
  • cp make.inc.example make.inc
  • make f2clib
  • make blaslib
  • make (this takes a while)
  • sudo cp INCLUDE/f2c.h /usr/include
  • sudo cp INCLUDE/clapack.h /usr/include
  • sudo chmod 644 /usr/include/f2c.h
  • sudo chmod 644 /usr/include/clapack.h**

And my little codes.

#include <iostream>
using namespace std;
extern "C" {
#include "f2c.h"
#include "clapack.h"
}


int main()
{
int i,j;
float *A = new float[16];
A[0] = 1; A[1] = 1; A[2] = 1;  A[3] = 1;
A[4] = 1; A[5] = 2; A[6] = 3;  A[7] = 4;
A[8] = 1; A[9] = 3; A[10]= 6;  A[11]= 10;
A[12]= 1; A[13]= 4; A[14]= 10; A[15]= 20;
cout << "A = (";
for (i=0; i<15; i++) cout << A[i] << ",";
cout << A[15] << ")" << endl;

// use call-by-reference parameters, in another adaptation to Fortran
int n = 4;
char jobz = 'V';
char uplo = 'U';
integer N = n;
integer LDA=n;
float* eigvalue=new float[n];
int worksize;    // must have lwork>=3n-1, so n^2 is not big enough for n=2!
if (n==2) worksize = 5; else worksize = n*n;
float *work;
work=new float[worksize];
integer lwork = worksize;
integer info;    // exit status

ssyev_(&jobz, &uplo, &N, A, &LDA, eigvalue, work, &lwork, &info);

cout << "info = " << info << endl;
if (info>=0)

{

    cout << "Eigenvalues = ("

     << eigvalue[0] << "," << eigvalue[1] << ","

     << eigvalue[2] << "," << eigvalue[3] << ")" << endl;

    cout << "Correct answer in GvL: (.0380, .4538, 2.2034 (typo?), 26.3047)"

     << endl;

    // eigenvectors are stored in A (overwriting the original matrix):

    // ith eigenvector = ith column of A

    for (i=0; i<4; i++)

      {

    cout << "Eigenvector " << i << " = (";
    for (j=0; j<3; j++)
      cout << A[j+i*4] << ","; // jth elt of ith col=jth elt of ith evector
    cout << A[3+i*4] << ")" << endl;
      }
}
delete [] A;
delete [] eigvalue;  // be a good boy scout
delete [] work;
return 0;

}

Plz help ..

解决方案

Problem solved.. I have to say the documents for beginners are terrible...

copy blas_LINUX.a lapack_LINUX.a F2CLIBS/libf2c.a to /usr/local/lib and rename to libblas.a liblapack.a libf2c.a separately.

change the permission "chmod 777 libblas.a liblapack.a libf2c.a"

write a test.cpp and call "g++ test.cpp -llapack -lblas -lf2c -o test"

这篇关于使用CLAPACK未定义的引用错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!