背景在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的库,编译器没有给出任何警告。
任何帮助将不胜感激。
我怀疑'zgeev_'是在图书馆,但你缺少一个函数原型为它 – finnw
感谢回答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
您还需要'extern“C”'在原型前面。 – finnw