我已经试了好几个小时了,它把我逼疯了最后一个错误是:
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和不使用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.364位在/usr/lib64中,我有liblapack.a liblapack.so还有libblas。一个libblas.so还有利格弗特兰。所以。3
不带函数“invertMatrix”(使用库的函数)的同一代码编译得很好。
有什么想法或建议吗?
谢谢大家的帮助。
瓦瓦
最佳答案
我很肯定您还需要链接到libcblas,这是libblas的c包装库注意libblas是一个FORTRAN库,因此它不包含正在调用的clapack函数。