无法将c代码链接到lapack / blas:未定义的引用

我已经尝试了几个小时,它让我发疯。 我得到的最后一个错误是:

demo_cblas.c:(.text+0x83): undefined reference to `clapack_sgetrf' demo_cblas.c:(.text+0xa3): undefined reference to `clapack_sgetri' 

我正在使用编译代码

 /usr/bin/gcc -o demo_cblas demo_cblas.c -L /usr/lib64 -l :libgfortran.so.3 -L /usr/lib64 \ -llapack -L /usr/lib64 -lblas 

我尝试使用和不使用libgfortran,使用不同的编译器gcc-33,gcc-47,gcc-48。 测试代码不是来自我,而是来自这个论坛……

 #include  #include  #include  #include "clapack.h" #include "cblas.h" void invertMatrix(float *a, unsigned int height){ int info, ipiv[height]; info = clapack_sgetrf(CblasColMajor, height, height, a, height, ipiv); info = clapack_sgetri(CblasColMajor, height, a, height, ipiv); } void displayMatrix(float *a, unsigned int height, unsigned int width) { int i, j; for(i = 0; i < height; i++){ for(j = 0; j < width; j++) { printf("%1.3f ", a[height*j + i]); } printf("\n"); } printf("\n"); } int main(int argc, char *argv[]) { int i; float a[9], b[9], c[9]; srand(time(NULL)); for(i = 0; i < 9; i++) { a[i] = 1.0f*rand()/RAND_MAX; b[i] = a[i]; } displayMatrix(a, 3, 3); return 0; } 

我在Suse 12.3 64bits。 在/ usr / lib64我有liblapack.a liblapack.so,…和libblas.a libblas.so,…和libgfortran.so.3

没有函数“invertMatrix”(使用库的那个)的相同代码编译得很好。

有什么想法或建议吗?

感谢大家的帮助。

瓦瓦

我非常肯定你还需要链接到libcblas,它是libblas的c包装器库。 请注意,libblas是一个FORTRAN库,因此不包含您正在调用的函数clapack_ *。

我刚刚在FreeBSD上使用:

 gcc -o test test.c \ -llapack -lblas -lalapack -lcblas 

我安装了math / atlas(来自ports)和lapack和blas包。

在这里看到我的问题