C++ Lapack未定义引用
我不确定这是否是问这个问题的正确地点,但是: 我在使用lapack时遇到问题,我在编译过程中得到了“未定义的对`dsteqr`的引用”(“c++-llapack-lblas TP6.cpp-o TP6”) 我怎样才能解决这个问题 代码如下:C++ Lapack未定义引用,c++,fortran,ubuntu-14.04,undefined-reference,lapack,C++,Fortran,Ubuntu 14.04,Undefined Reference,Lapack,我不确定这是否是问这个问题的正确地点,但是: 我在使用lapack时遇到问题,我在编译过程中得到了“未定义的对`dsteqr`的引用”(“c++-llapack-lblas TP6.cpp-o TP6”) 我怎样才能解决这个问题 代码如下: #include <iostream> #include <fstream> #include <cmath> using namespace std; extern "C" void dsteqr_( char * ,
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
extern "C"
void dsteqr_( char * , int *, double [], double [], double [], int *, double [],
int * ) ;
void tridiag( int n, double d[], double e[], double z[] )
{
int info ; // diagnostic
double work[2*n-2] ;
char compz='v' ;
dsteqr_( &compz, &n, d, e, z, &n, work, &info ) ;
if ( info == 0 ) cout << "La diagonalisation s'est bien passée" << endl ;
else cout << "Attention ! SSTEQR : info =" << info << endl ;
}
double V(double x){
return 0;
}
int main() {
int n=100;
double d[n], e[n-1], z[n*n], x[n], v[n], L = 5, delta_x = L/n;
ofstream of1("eigenvalues.dat"), of2("eigenvectors.dat");
for(int i=0; i<n; i++){
for (int j=0; i<n; j++){
if (i == j) z[i+n*j] = 1;
else z[i+n*j] = 0;
}
x[i] = (i+0.5)*delta_x - 0.5*L;
v[i] = V(x[i]);
d[i] = 2/pow(delta_x, 2) + v[i];
if (i==n-2) break;
e[i] = -1/pow(delta_x, 2);
}
tridiag(n,d,e,z);
for (int i=0; i<n; i++){
of1 << d[i] << endl;
for (int j=0; j<n; j++){
of2 << z[i+n*j];
}
}
return 0;
}
#包括
#包括
#包括
使用名称空间std;
外部“C”
void dsteqr(char*,int*,double[],double[],double[],int*,double[],
int*);
void tridiag(整数n,双d[],双e[],双z[])
{
int info;//诊断
双功[2*n-2];
char compz='v';
dsteqr(和compz,&n,d,e,z,&n,work,&info);
如果(信息==0)请不要尝试c++TP6.cpp-o TP6-llapack-lblas
。答对了,谢谢。为什么顺序很重要?还有,如果你能找出为什么我会出现分段错误…如果你链接静态库,链接器会删除链中到目前为止没有被引用的任何名称。至于分段错误,请使用调试器,你可能正在读取结束一个数组或使用未初始化的数据。@mwa1默认情况下,GNU链接器只按顺序对库进行一次传递。您可以使用--start group
等请求多次传递。@user657267为什么不回答这个问题?改为尝试c++TP6.cpp-o TP6-llapack-lblas
。宾果,谢谢。为什么顺序是正确的nt?还有,如果你能找出我出现分段错误的原因……如果你链接的是静态库,链接器将删除链中迄今为止未被引用的任何名称。至于分段错误,请使用调试器,你可能正在读取一个数组的结尾或使用未初始化的数据。@mwa1默认情况下,GNU链接器只执行一个单独的操作按顺序传递库。您可以使用--start group
等请求多次传递。@user657267为什么不回答这个问题?