2

背景

我试图通过在 LAPACK 库中使用 zgeev 例程来查找复杂矩阵的特征值。据我了解,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 )

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

$ 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 的库,编译器也没有给出任何警告。

任何帮助将不胜感激。

4

1 回答 1

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*);
于 2016-04-28T20:03:39.707 回答