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

时间:2014-06-26 10:12:17

标签: c gcc undefined 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 <stdlib.h>
#include <stdio.h>
#include <time.h>
#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”功能的代码(使用库的代码)编译得很好。

有任何想法或建议吗?

谢谢大家的帮助。

瓦瓦

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

我刚刚在FreeBSD上使用了这个:

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

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

请参阅我的问题here