2012-12-15 32 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*);