无法将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包。
在这里看到我的问题