Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Lapack未定义引用_C++_Fortran_Ubuntu 14.04_Undefined Reference_Lapack - Fatal编程技术网

C++ Lapack未定义引用

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 * ,

我不确定这是否是问这个问题的正确地点,但是:

我在使用lapack时遇到问题,我在编译过程中得到了“未定义的对`dsteqr`的引用”(“c++-llapack-lblas TP6.cpp-o TP6”) 我怎样才能解决这个问题

代码如下:

#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为什么不回答这个问题?