背景
我试图通过在LAPACK库中使用zgeev例程来找到复杂矩阵的特征值。据我所知,LAPACK是为FORTRAN编写的,因此要将它与C(或C ++)程序一起使用,必须进行一些修改,例如转换矩阵并在例程名称中附加下划线(REFERENCE:{{3 }})
问题
将LAPACK库链接到C ++程序(http://www.physics.orst.edu/~rubin/nacphy/lapack/codes/eigen-c.html)
和
在我的Windows 7笔记本电脑上使用g ++在cygwin上编译它,我使用以下命令:
$ g++ eigen_complex.cpp -L G:\cygwin_root_dir\lib -lliblapack.a -llibblas.a
并根据以下结果:
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的库,编译器也没有给出任何警告。
非常感谢任何帮助。
答案 0 :(得分: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*);