2012-12-15 29 views
2

背景在Cygwin上

我试图通过LAPACK库使用zgeev例行找到一个复杂的矩阵的特征值链接LAPACK库G ++。据我所知,LAPACK是为FORTRAN编写的,因此要将它用于C(或C++)程序,必须进行一些修改,例如转换矩阵并在例程名称中附加下划线(参考:http://www.physics.orst.edu/~rubin/nacphy/lapack/codes/eigen-c.html

问题

要LAPACK库链接到C++程序(http://www.physics.orst.edu/~rubin/nacphy/lapack/codes/eigen-c.html

使用g ++编译它上的cygwin在我的Windows 7的笔记本电脑,我使用下面的命令:

$ g++ eigen_complex.cpp -L G:\cygwin_root_dir\lib -lliblapack.a -llibblas.a 

和getiing以下结果:

eigen_complex.cpp: In function `int main()': 
eigen_complex.cpp:41: error: `zgeev_' undeclared (first use this function) 
eigen_complex.cpp:41: error: (Each undeclared identifier is reported only once for each function it appears in.) 

我不明白是什么原因造成这个错误。将库的名称从liblapack更改为lapack或任何东西(比如说“lapa”)对错误没有任何影响。 以下编译命令返回相同的结果如上述

g++ eigen_complex.cpp -L G:\cygwin_root_dir\lib -llapack.a -lblas.a 
g++ eigen_complex.cpp -L G:\cygwin_root_dir\lib -llapack -lblas 
g++ eigen_complex.cpp -L G:\cygwin_root_dir\lib -lliblapack -llibblas 
g++ eigen_complex.cpp -lliblapack -llibblas 

g++ eigen_complex.cpp -lliblapack -lxyz 

也。 我相信没有名为xyz的库,编译器没有给出任何警告。

任何帮助将不胜感激。

+1

我怀疑'zgeev_'是在图书馆,但你缺少一个函数原型为它 – finnw

+0

感谢回答finnw.I添加了函数原型。 'void zgeev_(char *,char *,int *,double *,int *,struct complex [],struct complex [1] [1],int *,struct complex [1] [1],int *,struct complex [],int *,struct complex [],int *);'。正如你所建议的,但现在编译时使用:'g ++ eigen_complex.cpp -llapack -lblas'错误是:'/tmp/ccOcBaMv.o:eigen_complex.cpp:(.text+0x256):undefined reference to zgeev_(char *, char *,int *,double *,int *,complex *,complex(*)[1],int *,complex(*)[1],int *,complex *,int *,complex *,int *)' 'collect2:ld返回1退出状态' – user1906035

+2

您还需要'extern“C”'在原型前面。 – finnw

回答

1

希望在头在你的项目中添加这台样机的地方应解决它:

extern "C" void zgeev_(char*, char*,int*,double *, int*, struct complex [], struct complex [1][1], int*, struct complex [1][1], int*, struct complex [], int*, struct complex [], int*);