背景在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